Class DefaultLifecycleProcessor
- All Implemented Interfaces:
Aware, BeanFactoryAware, Lifecycle, LifecycleProcessor
LifecycleProcessor strategy.
Provides interaction with Lifecycle and SmartLifecycle beans in
groups for specific phases, on startup/shutdown as well as for explicit start/stop
interactions on a ConfigurableApplicationContext.
As of 6.1, this also includes support for JVM checkpoint/restore (Project CRaC)
when the org.crac:crac dependency is on the classpath. All running beans
will get stopped and restarted according to the CRaC checkpoint/restore callbacks.
As of 6.2, this processor can be configured with custom timeouts for specific
shutdown phases, applied to SmartLifecycle.stop(Runnable) implementations.
As of 6.2.6, there is also support for the concurrent startup of specific phases
with individual timeouts, triggering the Lifecycle.start() callbacks
of all associated beans asynchronously and then waiting for all of them to return,
as an alternative to the default sequential startup of beans without a timeout.
- Since:
- 3.0
- Author:
- Mark Fisher, Juergen Hoeller, Sebastien Deleuze
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringProperty name for a common context checkpoint: "spring.context.checkpoint".static final StringProperty name for terminating the JVM when the context reaches a specific phase: "spring.context.exit".static final StringRecognized value for the context checkpoint and exit properties: "onRefresh". -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionRetrieve all applicable Lifecycle beans: all singletons that have already been created, as well as all SmartLifecycle beans (even if they are marked as lazy-init).protected intDetermine the lifecycle phase of the given bean.booleanCheck whether this component is currently running.voidonClose()Notification of context close phase for auto-stopping components before destruction.voidonPause()Notification of context pause for auto-stopping components.voidNotification of context refresh for auto-starting components.voidNotification of context restart for auto-stopping and subsequently auto-starting components.voidsetBeanFactory(BeanFactory beanFactory) Callback that supplies the owning factory to a bean instance.voidsetConcurrentStartupForPhase(int phase, long timeout) Switch to concurrent startup for a specific phase (group ofSmartLifecyclebeans with the same 'phase' value) with a corresponding timeout.voidsetConcurrentStartupForPhases(Map<Integer, Long> phasesWithTimeouts) Switch to concurrent startup for each given phase (group ofSmartLifecyclebeans with the same 'phase' value) with corresponding timeouts.voidsetTimeoutForShutdownPhase(int phase, long timeout) Specify the maximum time allotted for the shutdown of a specific phase (group ofSmartLifecyclebeans with the same 'phase' value).voidsetTimeoutPerShutdownPhase(long timeoutPerShutdownPhase) Specify the maximum time allotted in milliseconds for the shutdown of any phase (group ofSmartLifecyclebeans with the same 'phase' value).voidsetTimeoutsForShutdownPhases(Map<Integer, Long> phasesWithTimeouts) Specify the maximum time allotted for the shutdown of each given phase (group ofSmartLifecyclebeans with the same 'phase' value).voidstart()Start all registered beans that implementLifecycleand are not already running.voidstop()Stop all registered beans that implementLifecycleand are currently running.
-
Field Details
-
CHECKPOINT_PROPERTY_NAME
Property name for a common context checkpoint: "spring.context.checkpoint".- Since:
- 6.1
- See Also:
-
EXIT_PROPERTY_NAME
Property name for terminating the JVM when the context reaches a specific phase: "spring.context.exit".- Since:
- 6.1
- See Also:
-
ON_REFRESH_VALUE
Recognized value for the context checkpoint and exit properties: "onRefresh".- Since:
- 6.1
- See Also:
-
-
Constructor Details
-
DefaultLifecycleProcessor
public DefaultLifecycleProcessor()
-
-
Method Details
-
setConcurrentStartupForPhases
Switch to concurrent startup for each given phase (group ofSmartLifecyclebeans with the same 'phase' value) with corresponding timeouts.Note: By default, the startup for every phase will be sequential without a timeout. Calling this setter with timeouts for the given phases switches to a mode where the beans in these phases will be started concurrently, cancelling the startup if the corresponding timeout is not met for any of these phases.
For an actual concurrent startup, a bootstrap
Executorneeds to be set for the application context, typically through a "bootstrapExecutor" bean.- Parameters:
phasesWithTimeouts- a map of phase values (matchingSmartLifecycle.getPhase()) and corresponding timeout values (in milliseconds)- Since:
- 6.2.6
- See Also:
-
setConcurrentStartupForPhase
public void setConcurrentStartupForPhase(int phase, long timeout) Switch to concurrent startup for a specific phase (group ofSmartLifecyclebeans with the same 'phase' value) with a corresponding timeout.Note: By default, the startup for every phase will be sequential without a timeout. Calling this setter with a timeout for the given phase switches to a mode where the beans in this phase will be started concurrently, cancelling the startup if the corresponding timeout is not met for this phase.
For an actual concurrent startup, a bootstrap
Executorneeds to be set for the application context, typically through a "bootstrapExecutor" bean.- Parameters:
phase- the phase value (matchingSmartLifecycle.getPhase())timeout- the corresponding timeout value (in milliseconds)- Since:
- 6.2.6
- See Also:
-
setTimeoutsForShutdownPhases
Specify the maximum time allotted for the shutdown of each given phase (group ofSmartLifecyclebeans with the same 'phase' value).In case of no specific timeout configured, the default timeout per shutdown phase will apply: 10000 milliseconds (10 seconds) as of 6.2.
- Parameters:
phasesWithTimeouts- a map of phase values (matchingSmartLifecycle.getPhase()) and corresponding timeout values (in milliseconds)- Since:
- 6.2
- See Also:
-
setTimeoutForShutdownPhase
public void setTimeoutForShutdownPhase(int phase, long timeout) Specify the maximum time allotted for the shutdown of a specific phase (group ofSmartLifecyclebeans with the same 'phase' value).In case of no specific timeout configured, the default timeout per shutdown phase will apply: 10000 milliseconds (10 seconds) as of 6.2.
- Parameters:
phase- the phase value (matchingSmartLifecycle.getPhase())timeout- the corresponding timeout value (in milliseconds)- Since:
- 6.2
- See Also:
-
setTimeoutPerShutdownPhase
public void setTimeoutPerShutdownPhase(long timeoutPerShutdownPhase) Specify the maximum time allotted in milliseconds for the shutdown of any phase (group ofSmartLifecyclebeans with the same 'phase' value).The default value is 10000 milliseconds (10 seconds) as of 6.2.
- See Also:
-
setBeanFactory
Description copied from interface:BeanFactoryAwareCallback that supplies the owning factory to a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean.afterPropertiesSet()or a custom init-method.- Specified by:
setBeanFactoryin interfaceBeanFactoryAware- Parameters:
beanFactory- owning BeanFactory (nevernull). The bean can immediately call methods on the factory.- See Also:
-
start
public void start()Start all registered beans that implementLifecycleand are not already running. Any bean that implementsSmartLifecyclewill be started within its 'phase', and all phases will be ordered from lowest to highest value. All beans that do not implementSmartLifecyclewill be started in the default phase 0. A bean declared as a dependency of another bean will be started before the dependent bean regardless of the declared phase. -
stop
public void stop()Stop all registered beans that implementLifecycleand are currently running. Any bean that implementsSmartLifecyclewill be stopped within its 'phase', and all phases will be ordered from highest to lowest value. All beans that do not implementSmartLifecyclewill be stopped in the default phase 0. A bean declared as dependent on another bean will be stopped before the dependency bean regardless of the declared phase. -
onRefresh
public void onRefresh()Description copied from interface:LifecycleProcessorNotification of context refresh for auto-starting components.- Specified by:
onRefreshin interfaceLifecycleProcessor- See Also:
-
onRestart
public void onRestart()Description copied from interface:LifecycleProcessorNotification of context restart for auto-stopping and subsequently auto-starting components.- Specified by:
onRestartin interfaceLifecycleProcessor- See Also:
-
onPause
public void onPause()Description copied from interface:LifecycleProcessorNotification of context pause for auto-stopping components.- Specified by:
onPausein interfaceLifecycleProcessor- See Also:
-
onClose
public void onClose()Description copied from interface:LifecycleProcessorNotification of context close phase for auto-stopping components before destruction.- Specified by:
onClosein interfaceLifecycleProcessor- See Also:
-
isRunning
public boolean isRunning()Description copied from interface:LifecycleCheck whether this component is currently running.In the case of a container, this will return
trueonly if all components that apply are currently running. -
getLifecycleBeans
Retrieve all applicable Lifecycle beans: all singletons that have already been created, as well as all SmartLifecycle beans (even if they are marked as lazy-init).- Returns:
- the Map of applicable beans, with bean names as keys and bean instances as values
-
getPhase
Determine the lifecycle phase of the given bean.The default implementation checks for the
Phasedinterface, using a default of 0 otherwise. Can be overridden to apply other/further policies.- Parameters:
bean- the bean to introspect- Returns:
- the phase (an integer value)
- See Also:
-