diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java index 413202337aa..81f4d876015 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java @@ -26,8 +26,8 @@ import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.HierarchicalBeanFactory; import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.beans.metrics.ApplicationStartup; import org.springframework.core.convert.ConversionService; +import org.springframework.core.metrics.ApplicationStartup; import org.springframework.lang.Nullable; import org.springframework.util.StringValueResolver; @@ -281,13 +281,13 @@ public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, Single * Set the {@code ApplicationStartup} for this bean factory. *
This allows the application context to record metrics during application startup. * @param applicationStartup the new application startup - * @since 5.3.0 + * @since 5.3 */ void setApplicationStartup(ApplicationStartup applicationStartup); /** * Return the {@code ApplicationStartup} for this bean factory. - * @since 5.3.0 + * @since 5.3 */ ApplicationStartup getApplicationStartup(); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index cb35af57760..572de98f9f0 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -69,14 +69,14 @@ import org.springframework.beans.factory.config.DestructionAwareBeanPostProcesso import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor; import org.springframework.beans.factory.config.Scope; import org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor; -import org.springframework.beans.metrics.ApplicationStartup; -import org.springframework.beans.metrics.StartupStep; import org.springframework.core.AttributeAccessor; import org.springframework.core.DecoratingClassLoader; import org.springframework.core.NamedThreadLocal; import org.springframework.core.ResolvableType; import org.springframework.core.convert.ConversionService; import org.springframework.core.log.LogMessage; +import org.springframework.core.metrics.ApplicationStartup; +import org.springframework.core.metrics.StartupStep; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index 2b74a9439ea..50e537d53e5 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -71,13 +71,13 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.DependencyDescriptor; import org.springframework.beans.factory.config.NamedBeanHolder; -import org.springframework.beans.metrics.StartupStep; import org.springframework.core.OrderComparator; import org.springframework.core.ResolvableType; import org.springframework.core.annotation.MergedAnnotation; import org.springframework.core.annotation.MergedAnnotations; import org.springframework.core.annotation.MergedAnnotations.SearchStrategy; import org.springframework.core.log.LogMessage; +import org.springframework.core.metrics.StartupStep; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; diff --git a/spring-context/src/main/java/org/springframework/context/ApplicationStartupAware.java b/spring-context/src/main/java/org/springframework/context/ApplicationStartupAware.java index ac0db351364..b18cf6ccac4 100644 --- a/spring-context/src/main/java/org/springframework/context/ApplicationStartupAware.java +++ b/spring-context/src/main/java/org/springframework/context/ApplicationStartupAware.java @@ -17,14 +17,14 @@ package org.springframework.context; import org.springframework.beans.factory.Aware; -import org.springframework.beans.metrics.ApplicationStartup; +import org.springframework.core.metrics.ApplicationStartup; /** * Interface to be implemented by any object that wishes to be notified * of the {@link ApplicationStartup} that it runs with. * * @author Brian Clozel - * @since 5.3.0 + * @since 5.3 * @see ApplicationContextAware */ public interface ApplicationStartupAware extends Aware { diff --git a/spring-context/src/main/java/org/springframework/context/ConfigurableApplicationContext.java b/spring-context/src/main/java/org/springframework/context/ConfigurableApplicationContext.java index 28f300caf05..29e0daf523c 100644 --- a/spring-context/src/main/java/org/springframework/context/ConfigurableApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/ConfigurableApplicationContext.java @@ -21,10 +21,10 @@ import java.io.Closeable; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.metrics.ApplicationStartup; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import org.springframework.core.io.ProtocolResolver; +import org.springframework.core.metrics.ApplicationStartup; import org.springframework.lang.Nullable; /** @@ -90,7 +90,7 @@ public interface ConfigurableApplicationContext extends ApplicationContext, Life /** * Name of the {@link ApplicationStartup} bean in the factory. - * @since 5.3.0 + * @since 5.3 */ String APPLICATION_STARTUP_BEAN_NAME = "applicationStartup"; @@ -139,13 +139,13 @@ public interface ConfigurableApplicationContext extends ApplicationContext, Life *
This allows the application context to record metrics * during startup. * @param applicationStartup the new context event factory - * @since 5.3.0 + * @since 5.3 */ void setApplicationStartup(ApplicationStartup applicationStartup); /** * Return the {@link ApplicationStartup} for this application context. - * @since 5.3.0 + * @since 5.3 */ ApplicationStartup getApplicationStartup(); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java index 44f31572220..86ea5feb733 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java @@ -22,9 +22,9 @@ import java.util.function.Supplier; import org.springframework.beans.factory.config.BeanDefinitionCustomizer; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.beans.metrics.StartupStep; import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.metrics.StartupStep; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index d29f0a4863f..c0f01dbe68c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -48,8 +48,6 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.beans.factory.support.BeanNameGenerator; -import org.springframework.beans.metrics.ApplicationStartup; -import org.springframework.beans.metrics.StartupStep; import org.springframework.context.ApplicationStartupAware; import org.springframework.context.EnvironmentAware; import org.springframework.context.ResourceLoaderAware; @@ -60,6 +58,8 @@ import org.springframework.core.env.Environment; import org.springframework.core.env.StandardEnvironment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; +import org.springframework.core.metrics.ApplicationStartup; +import org.springframework.core.metrics.StartupStep; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.MethodMetadata; import org.springframework.core.type.classreading.CachingMetadataReaderFactory; diff --git a/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java b/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java index 4e89c6bd8d7..503efacc4f1 100644 --- a/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java +++ b/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java @@ -22,11 +22,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.metrics.ApplicationStartup; -import org.springframework.beans.metrics.StartupStep; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.ResolvableType; +import org.springframework.core.metrics.ApplicationStartup; +import org.springframework.core.metrics.StartupStep; import org.springframework.lang.Nullable; import org.springframework.util.ErrorHandler; diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index 34c620bf1b2..7351f6df2bd 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -39,8 +39,6 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.metrics.ApplicationStartup; -import org.springframework.beans.metrics.StartupStep; import org.springframework.beans.support.ResourceEditorRegistrar; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -80,6 +78,8 @@ import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.metrics.ApplicationStartup; +import org.springframework.core.metrics.StartupStep; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; diff --git a/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java b/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java index 80c5ad354ab..f74909a635e 100644 --- a/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java +++ b/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java @@ -36,11 +36,11 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProce import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor; import org.springframework.beans.factory.support.RootBeanDefinition; -import org.springframework.beans.metrics.ApplicationStartup; -import org.springframework.beans.metrics.StartupStep; import org.springframework.core.OrderComparator; import org.springframework.core.Ordered; import org.springframework.core.PriorityOrdered; +import org.springframework.core.metrics.ApplicationStartup; +import org.springframework.core.metrics.StartupStep; import org.springframework.lang.Nullable; /** diff --git a/spring-beans/src/main/java/org/springframework/beans/metrics/ApplicationStartup.java b/spring-core/src/main/java/org/springframework/core/metrics/ApplicationStartup.java similarity index 96% rename from spring-beans/src/main/java/org/springframework/beans/metrics/ApplicationStartup.java rename to spring-core/src/main/java/org/springframework/core/metrics/ApplicationStartup.java index ff09c5f07ca..7d375720dc7 100644 --- a/spring-beans/src/main/java/org/springframework/beans/metrics/ApplicationStartup.java +++ b/spring-core/src/main/java/org/springframework/core/metrics/ApplicationStartup.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.beans.metrics; +package org.springframework.core.metrics; /** * Instruments the application startup phase using {@link StartupStep steps}. @@ -23,7 +23,7 @@ package org.springframework.beans.metrics; * or their processing time. * * @author Brian Clozel - * @since 5.3.0 + * @since 5.3 */ public interface ApplicationStartup { diff --git a/spring-beans/src/main/java/org/springframework/beans/metrics/DefaultApplicationStartup.java b/spring-core/src/main/java/org/springframework/core/metrics/DefaultApplicationStartup.java similarity index 97% rename from spring-beans/src/main/java/org/springframework/beans/metrics/DefaultApplicationStartup.java rename to spring-core/src/main/java/org/springframework/core/metrics/DefaultApplicationStartup.java index 62d66c24342..09f7c4cfb89 100644 --- a/spring-beans/src/main/java/org/springframework/beans/metrics/DefaultApplicationStartup.java +++ b/spring-core/src/main/java/org/springframework/core/metrics/DefaultApplicationStartup.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.beans.metrics; +package org.springframework.core.metrics; import java.util.Collections; import java.util.Iterator; @@ -22,6 +22,7 @@ import java.util.function.Supplier; /** * Default "no op" {@code ApplicationStartup} implementation. + * *
This variant is designed for minimal overhead and does not record events. * * @author Brian Clozel @@ -33,6 +34,7 @@ class DefaultApplicationStartup implements ApplicationStartup { return new DefaultStartupStep(); } + static class DefaultStartupStep implements StartupStep { boolean recorded = false; @@ -80,6 +82,7 @@ class DefaultApplicationStartup implements ApplicationStartup { this.recorded = true; } + static class DefaultTags implements StartupStep.Tags { @Override diff --git a/spring-beans/src/main/java/org/springframework/beans/metrics/StartupStep.java b/spring-core/src/main/java/org/springframework/core/metrics/StartupStep.java similarity index 85% rename from spring-beans/src/main/java/org/springframework/beans/metrics/StartupStep.java rename to spring-core/src/main/java/org/springframework/core/metrics/StartupStep.java index d782c605c30..89def84f956 100644 --- a/spring-beans/src/main/java/org/springframework/beans/metrics/StartupStep.java +++ b/spring-core/src/main/java/org/springframework/core/metrics/StartupStep.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.beans.metrics; +package org.springframework.core.metrics; import java.util.function.Supplier; @@ -22,17 +22,19 @@ import org.springframework.lang.Nullable; /** * Step recording metrics about a particular phase or action happening during the {@link ApplicationStartup}. + * *
The lifecycle of a {@code StartupStep} goes as follows: *
Implementations can track the "execution time" or other metrics for steps. * * @author Brian Clozel - * @since 5.3.0 + * @since 5.3 */ public interface StartupStep { @@ -51,7 +53,8 @@ public interface StartupStep { /** * Return, if available, the id of the parent step. - *
The parent step is the step that was started the most recently when the current step was created. + *
The parent step is the step that was started the most recently
+ * when the current step was created.
*/
@Nullable
Long getParentId();
@@ -81,13 +84,14 @@ public interface StartupStep {
*/
void end();
+
/**
* Mutable collection of {@link Tag}.
*/
interface Tags extends Iterable {@link org.springframework.beans.metrics.StartupStep.Tags} are serialized as a single {@code String},
- * since Flight Recorder events do not support complex types.
+ *
+ * {@link org.springframework.core.metrics.StartupStep.Tags} are serialized
+ * as a single {@code String}, since Flight Recorder events do not support complex types.
*
* @author Brian Clozel
+ * @since 5.3
*/
@Category("Spring Application")
@Label("Startup Step")
diff --git a/spring-beans/src/main/java/org/springframework/beans/metrics/jfr/FlightRecorderStartupStep.java b/spring-core/src/main/java/org/springframework/core/metrics/jfr/FlightRecorderStartupStep.java
similarity index 97%
rename from spring-beans/src/main/java/org/springframework/beans/metrics/jfr/FlightRecorderStartupStep.java
rename to spring-core/src/main/java/org/springframework/core/metrics/jfr/FlightRecorderStartupStep.java
index 6a4ff6e3d74..2e67a7a9f90 100644
--- a/spring-beans/src/main/java/org/springframework/beans/metrics/jfr/FlightRecorderStartupStep.java
+++ b/spring-core/src/main/java/org/springframework/core/metrics/jfr/FlightRecorderStartupStep.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.beans.metrics.jfr;
+package org.springframework.core.metrics.jfr;
import java.util.Iterator;
import java.util.function.Consumer;
@@ -22,7 +22,7 @@ import java.util.function.Supplier;
import org.jetbrains.annotations.NotNull;
-import org.springframework.beans.metrics.StartupStep;
+import org.springframework.core.metrics.StartupStep;
/**
* {@link StartupStep} implementation for the Java Flight Recorder.
@@ -39,13 +39,16 @@ class FlightRecorderStartupStep implements StartupStep {
private final Consumer