Class ExecutorConfigurationSupport
- All Implemented Interfaces:
- Serializable,- ThreadFactory,- EventListener,- Aware,- BeanNameAware,- DisposableBean,- InitializingBean,- ApplicationContextAware,- ApplicationListener<ContextClosedEvent>,- Lifecycle,- Phased,- SmartLifecycle
- Direct Known Subclasses:
- ScheduledExecutorFactoryBean,- ThreadPoolExecutorFactoryBean,- ThreadPoolTaskExecutor,- ThreadPoolTaskScheduler
ExecutorService
 (typically a ThreadPoolExecutor or
 ScheduledThreadPoolExecutor).
 Defines common configuration settings and common lifecycle handling,
 inheriting thread customization options (name, priority, etc) from
 CustomizableThreadCreator.
- Since:
- 3.0
- Author:
- Juergen Hoeller
- See Also:
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final intThe default phase for an executorSmartLifecycle:Integer.MAX_VALUE / 2.protected final Log
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected voidafterExecute(Runnable task, Throwable ex) An after-execute callback for framework subclasses to delegate to (for start/stop handling), and possibly also for custom subclasses to extend (making sure to call this implementation as well).voidCallsinitialize()after the container applied all property values.protected voidbeforeExecute(Thread thread, Runnable task) A before-execute callback for framework subclasses to delegate to (for start/stop handling), and possibly also for custom subclasses to extend (making sure to call this implementation as well).protected voidcancelRemainingTask(Runnable task) Cancel the given remaining task which never commenced execution, as returned fromExecutorService.shutdownNow().voiddestroy()Callsshutdownwhen the BeanFactory destroys the executor instance.intgetPhase()Return the lifecycle phase for pausing and resuming this executor.voidSet up the ExecutorService.protected abstract ExecutorServiceinitializeExecutor(ThreadFactory threadFactory, RejectedExecutionHandler rejectedExecutionHandler) Create the targetExecutorServiceinstance.protected voidEarly shutdown signal: do not trigger further tasks, let existing tasks complete before hitting the actual destruction step in theshutdown()method.voidInitiate a shutdown on the underlying ExecutorService, rejecting further task submissions.booleanCheck whether this executor is not paused and has not been shut down either.voidContextClosedEventhandler for initiating an early shutdown.voidsetAcceptTasksAfterContextClose(boolean acceptTasksAfterContextClose) Set whether to accept further tasks after the application context close phase has begun.voidsetApplicationContext(ApplicationContext applicationContext) Set the ApplicationContext that this object runs in.voidsetAwaitTerminationMillis(long awaitTerminationMillis) Variant ofsetAwaitTerminationSeconds(int)with millisecond precision.voidsetAwaitTerminationSeconds(int awaitTerminationSeconds) Set the maximum number of seconds that this executor is supposed to block on shutdown in order to wait for remaining tasks to complete their execution before the rest of the container continues to shut down.voidsetBeanName(String name) Set the name of the bean in the bean factory that created this bean.voidsetPhase(int phase) Specify the lifecycle phase for pausing and resuming this executor.voidsetRejectedExecutionHandler(RejectedExecutionHandler rejectedExecutionHandler) Set the RejectedExecutionHandler to use for the ExecutorService.voidsetThreadFactory(ThreadFactory threadFactory) Set the ThreadFactory to use for the ExecutorService's thread pool.voidsetThreadNamePrefix(String threadNamePrefix) Specify the prefix to use for the names of newly created threads.voidsetWaitForTasksToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown) Set whether to wait for scheduled tasks to complete on shutdown, not interrupting running tasks and executing all tasks in the queue.voidshutdown()Perform a full shutdown on the underlying ExecutorService, according to the corresponding configuration settings.voidstart()Resume this executor if paused before (otherwise a no-op).voidstop()Pause this executor, not waiting for tasks to complete.voidPause this executor, triggering the given callback once all currently executing tasks have completed.Methods inherited from class org.springframework.scheduling.concurrent.CustomizableThreadFactorynewThreadMethods inherited from class org.springframework.util.CustomizableThreadCreatorcreateThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadPriorityMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.context.ApplicationListenersupportsAsyncExecutionMethods inherited from interface org.springframework.context.SmartLifecycleisAutoStartup
- 
Field Details- 
DEFAULT_PHASEpublic static final int DEFAULT_PHASEThe default phase for an executorSmartLifecycle:Integer.MAX_VALUE / 2.This is different from the default phase Integer.MAX_VALUEassociated with otherSmartLifecycleimplementations, putting the typically auto-started executor/scheduler beans into an earlier startup phase and a later shutdown phase while still leaving room for regularLifecyclecomponents with the common phase 0.
- 
logger
 
- 
- 
Constructor Details- 
ExecutorConfigurationSupportpublic ExecutorConfigurationSupport()
 
- 
- 
Method Details- 
setThreadFactorySet the ThreadFactory to use for the ExecutorService's thread pool. The default is the underlying ExecutorService's default thread factory.In a Jakarta EE or other managed environment with JSR-236 support, consider specifying a JNDI-located ManagedThreadFactory: by default, to be found at "java:comp/DefaultManagedThreadFactory". Use the "jee:jndi-lookup" namespace element in XML or the programmatic JndiLocatorDelegatefor convenient lookup. Alternatively, consider using Spring'sDefaultManagedAwareThreadFactorywith its fallback to local threads in case of no managed thread factory found.
- 
setThreadNamePrefixDescription copied from class:CustomizableThreadCreatorSpecify the prefix to use for the names of newly created threads. Default is "SimpleAsyncTaskExecutor-".- Overrides:
- setThreadNamePrefixin class- CustomizableThreadCreator
 
- 
setRejectedExecutionHandlerpublic void setRejectedExecutionHandler(@Nullable RejectedExecutionHandler rejectedExecutionHandler) Set the RejectedExecutionHandler to use for the ExecutorService. The default is the ExecutorService's default abort policy.- See Also:
 
- 
setAcceptTasksAfterContextClosepublic void setAcceptTasksAfterContextClose(boolean acceptTasksAfterContextClose) Set whether to accept further tasks after the application context close phase has begun.The default is falseas of 6.1, triggering an early soft shutdown of the executor and therefore rejecting any further task submissions. Switch this totruein order to let other components submit tasks even during their own stop and destruction callbacks, at the expense of a longer shutdown phase. The executor will not go through a coordinated lifecycle stop phase then but rather only stop tasks on its own shutdown.acceptTasksAfterContextClose=truelike behavior also follows from"waitForTasksToCompleteOnShutdown"which effectively is a specific variant of this flag, replacing the early soft shutdown in the concurrent managed stop phase with a serial soft shutdown in the executor's destruction step, with individual awaiting according to the"awaitTerminationSeconds"property.This flag will only have effect when the executor is running in a Spring application context and able to receive the ContextClosedEvent. Also, note thatThreadPoolTaskExecutoreffectively accepts tasks after context close by default, in combination with a coordinated lifecycle stop, unless"strictEarlyShutdown"has been specified.
- 
setWaitForTasksToCompleteOnShutdownpublic void setWaitForTasksToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown) Set whether to wait for scheduled tasks to complete on shutdown, not interrupting running tasks and executing all tasks in the queue.The default is false, with a coordinated lifecycle stop first (unless"acceptTasksAfterContextClose"has been set) and then an immediate shutdown through interrupting ongoing tasks and clearing the queue. Switch this flag totrueif you prefer fully completed tasks at the expense of a longer shutdown phase. The executor will not go through a coordinated lifecycle stop phase then but rather only stop and wait for task completion on its own shutdown.Note that Spring's container shutdown continues while ongoing tasks are being completed. If you want this executor to block and wait for the termination of tasks before the rest of the container continues to shut down - e.g. in order to keep up other resources that your tasks may need -, set the "awaitTerminationSeconds"property instead of or in addition to this property.
- 
setAwaitTerminationSecondspublic void setAwaitTerminationSeconds(int awaitTerminationSeconds) Set the maximum number of seconds that this executor is supposed to block on shutdown in order to wait for remaining tasks to complete their execution before the rest of the container continues to shut down. This is particularly useful if your remaining tasks are likely to need access to other resources that are also managed by the container.By default, this executor won't wait for the termination of tasks at all. It will either shut down immediately, interrupting ongoing tasks and clearing the remaining task queue - or, if the "waitForTasksToCompleteOnShutdown"flag has been set totrue, it will continue to fully execute all ongoing tasks as well as all remaining tasks in the queue, in parallel to the rest of the container shutting down.In either case, if you specify an await-termination period using this property, this executor will wait for the given time (max) for the termination of tasks. As a rule of thumb, specify a significantly higher timeout here if you set "waitForTasksToCompleteOnShutdown" to trueat the same time, since all remaining tasks in the queue will still get executed - in contrast to the default shutdown behavior where it's just about waiting for currently executing tasks that aren't reacting to thread interruption.
- 
setAwaitTerminationMillispublic void setAwaitTerminationMillis(long awaitTerminationMillis) Variant ofsetAwaitTerminationSeconds(int)with millisecond precision.- Since:
- 5.2.4
- See Also:
 
- 
setPhasepublic void setPhase(int phase) Specify the lifecycle phase for pausing and resuming this executor.The default for executors/schedulers is DEFAULT_PHASEas of 6.2, for stopping after otherSmartLifecycleimplementations.- Since:
- 6.1
- See Also:
 
- 
getPhasepublic int getPhase()Return the lifecycle phase for pausing and resuming this executor.- Specified by:
- getPhasein interface- Phased
- Specified by:
- getPhasein interface- SmartLifecycle
- Since:
- 6.1
- See Also:
 
- 
setBeanNameDescription copied from interface:BeanNameAwareSet the name of the bean in the bean factory that created this bean.Invoked after population of normal bean properties but before an init callback such as InitializingBean.afterPropertiesSet()or a custom init-method.- Specified by:
- setBeanNamein interface- BeanNameAware
- Parameters:
- name- the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use the- BeanFactoryUtils.originalBeanName(String)method to extract the original bean name (without suffix), if desired.
 
- 
setApplicationContextDescription copied from interface:ApplicationContextAwareSet the ApplicationContext that this object runs in. Normally this call will be used to initialize the object.Invoked after population of normal bean properties but before an init callback such as InitializingBean.afterPropertiesSet()or a custom init-method. Invoked afterResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader),ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)andMessageSourceAware, if applicable.- Specified by:
- setApplicationContextin interface- ApplicationContextAware
- Parameters:
- applicationContext- the ApplicationContext object to be used by this object
- See Also:
 
- 
afterPropertiesSetpublic void afterPropertiesSet()Callsinitialize()after the container applied all property values.- Specified by:
- afterPropertiesSetin interface- InitializingBean
- See Also:
 
- 
initializepublic void initialize()Set up the ExecutorService.
- 
initializeExecutorprotected abstract ExecutorService initializeExecutor(ThreadFactory threadFactory, RejectedExecutionHandler rejectedExecutionHandler) Create the targetExecutorServiceinstance. Called byafterPropertiesSet.- Parameters:
- threadFactory- the ThreadFactory to use
- rejectedExecutionHandler- the RejectedExecutionHandler to use
- Returns:
- a new ExecutorService instance
- See Also:
 
- 
destroypublic void destroy()Callsshutdownwhen the BeanFactory destroys the executor instance.- Specified by:
- destroyin interface- DisposableBean
- See Also:
 
- 
initiateShutdownpublic void initiateShutdown()Initiate a shutdown on the underlying ExecutorService, rejecting further task submissions.The executor will not accept further tasks and will prevent further scheduling of periodic tasks, letting existing tasks complete still. This step is non-blocking and can be applied as an early shutdown signal before following up with a full shutdown()call later on.Automatically called for early shutdown signals on context close. Can be manually called as well, in particular outside a container.- Since:
- 6.1
- See Also:
 
- 
shutdownpublic void shutdown()Perform a full shutdown on the underlying ExecutorService, according to the corresponding configuration settings.This step potentially blocks for the configured termination period, waiting for remaining tasks to complete. For an early shutdown signal to not accept further tasks, call initiateShutdown()first.
- 
cancelRemainingTaskCancel the given remaining task which never commenced execution, as returned fromExecutorService.shutdownNow().- Parameters:
- task- the task to cancel (typically a- RunnableFuture)
- Since:
- 5.0.5
- See Also:
 
- 
startpublic void start()Resume this executor if paused before (otherwise a no-op).
- 
stoppublic void stop()Pause this executor, not waiting for tasks to complete.
- 
stopPause this executor, triggering the given callback once all currently executing tasks have completed.- Specified by:
- stopin interface- SmartLifecycle
- Since:
- 6.1
- See Also:
 
- 
isRunningpublic boolean isRunning()Check whether this executor is not paused and has not been shut down either.
- 
beforeExecuteA before-execute callback for framework subclasses to delegate to (for start/stop handling), and possibly also for custom subclasses to extend (making sure to call this implementation as well).- Parameters:
- thread- the thread to run the task
- task- the task to be executed
- Since:
- 6.1
- See Also:
 
- 
afterExecuteAn after-execute callback for framework subclasses to delegate to (for start/stop handling), and possibly also for custom subclasses to extend (making sure to call this implementation as well).- Parameters:
- task- the task that has been executed
- ex- the exception thrown during execution, if any
- Since:
- 6.1
- See Also:
 
- 
onApplicationEventContextClosedEventhandler for initiating an early shutdown.- Specified by:
- onApplicationEventin interface- ApplicationListener<ContextClosedEvent>
- Parameters:
- event- the event to respond to
- Since:
- 6.1
- See Also:
 
- 
initiateEarlyShutdownprotected void initiateEarlyShutdown()Early shutdown signal: do not trigger further tasks, let existing tasks complete before hitting the actual destruction step in theshutdown()method. This goes along with acoordinated lifecycle stop phase.Called from onApplicationEvent(ContextClosedEvent)if no indications for a late shutdown have been determined, that is, if the"acceptTasksAfterContextCloseand"waitForTasksToCompleteOnShutdown"flags have not been set.The default implementation calls initiateShutdown().- Since:
- 6.1.4
- See Also:
 
 
-