Class ReactorResourceFactory
- All Implemented Interfaces:
Aware
,DisposableBean
,InitializingBean
,ApplicationContextAware
,Lifecycle
,Phased
,SmartLifecycle
- Direct Known Subclasses:
ReactorResourceFactory
LoopResources
for
event loop threads, and ConnectionProvider
for the connection pool,
within the lifecycle of a Spring ApplicationContext
.
This factory implements SmartLifecycle
and is expected typically
to be declared as a Spring-managed bean.
Notice that after a SmartLifecycle
stop/restart, new instances of
the configured LoopResources
and ConnectionProvider
are
created, so any references to those should be updated.
- Since:
- 6.1
- Author:
- Rossen Stoyanchev, Brian Clozel, Sebastien Deleuze, Juergen Hoeller
-
Field Summary
Fields inherited from interface org.springframework.context.SmartLifecycle
DEFAULT_PHASE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addGlobalResourcesConsumer
(Consumer<reactor.netty.http.HttpResources> consumer) Add a Consumer for configuring the global Reactor Netty resources on startup.void
Starts the resources if initialized outside an ApplicationContext.void
destroy()
Stops the resources if initialized outside an ApplicationContext.reactor.netty.resources.ConnectionProvider
Return the configuredConnectionProvider
.reactor.netty.resources.LoopResources
Return the configuredLoopResources
.int
getPhase()
Return the phase that this lifecycle object is supposed to run in.boolean
Check whether this component is currently running.boolean
Whether this factory exposes the globalHttpResources
holder.void
setApplicationContext
(ApplicationContext applicationContext) Setting anApplicationContext
is optional: If set, Reactor resources will be initialized in thelifecycle start
phase and closed in thelifecycle stop
phase.void
setConnectionProvider
(reactor.netty.resources.ConnectionProvider connectionProvider) Use this when you want to provide an externally managedConnectionProvider
instance.void
setConnectionProviderSupplier
(Supplier<reactor.netty.resources.ConnectionProvider> supplier) Use this when you don't want to participate in global resources and you want to customize the creation of the managedConnectionProvider
.void
setLoopResources
(reactor.netty.resources.LoopResources loopResources) Use this option when you want to provide an externally managedLoopResources
instance.void
setLoopResourcesSupplier
(Supplier<reactor.netty.resources.LoopResources> supplier) Use this when you don't want to participate in global resources and you want to customize the creation of the managedLoopResources
.void
setShutdownQuietPeriod
(Duration shutdownQuietPeriod) Configure the amount of time we'll wait before shutting down resources.void
setShutdownTimeout
(Duration shutdownTimeout) Configure the maximum amount of time to wait until the disposal of the underlying resources regardless if a task was submitted during theshutdownQuietPeriod
.void
setUseGlobalResources
(boolean useGlobalResources) Whether to use global Reactor Netty resources viaHttpResources
.void
start()
Start this component.void
stop()
Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.context.SmartLifecycle
isAutoStartup, stop
-
Constructor Details
-
ReactorResourceFactory
public ReactorResourceFactory()
-
-
Method Details
-
setUseGlobalResources
public void setUseGlobalResources(boolean useGlobalResources) Whether to use global Reactor Netty resources viaHttpResources
.Default is "true" in which case this factory initializes and stops the global Reactor Netty resources within Spring's
ApplicationContext
lifecycle. If set to "false" the factory manages its resources independent of the global ones.- Parameters:
useGlobalResources
- whether to expose and manage the global resources- See Also:
-
isUseGlobalResources
public boolean isUseGlobalResources()Whether this factory exposes the globalHttpResources
holder. -
addGlobalResourcesConsumer
Add a Consumer for configuring the global Reactor Netty resources on startup. When this option is used,setUseGlobalResources(boolean)
is also enabled.- Parameters:
consumer
- the consumer to apply- See Also:
-
setConnectionProviderSupplier
public void setConnectionProviderSupplier(Supplier<reactor.netty.resources.ConnectionProvider> supplier) Use this when you don't want to participate in global resources and you want to customize the creation of the managedConnectionProvider
.By default,
ConnectionProvider.elastic("http")
is used.Note that this supplier is ignored if
isUseGlobalResources()
istrue
or once theConnectionProvider
is set.- Parameters:
supplier
- the supplier to use
-
setConnectionProvider
public void setConnectionProvider(reactor.netty.resources.ConnectionProvider connectionProvider) Use this when you want to provide an externally managedConnectionProvider
instance.- Parameters:
connectionProvider
- the connection provider to use as is
-
getConnectionProvider
public reactor.netty.resources.ConnectionProvider getConnectionProvider()Return the configuredConnectionProvider
.Lazily tries to start the resources on demand if not initialized yet.
- See Also:
-
setLoopResourcesSupplier
Use this when you don't want to participate in global resources and you want to customize the creation of the managedLoopResources
.By default,
LoopResources.create("webflux-http")
is used.Note that this supplier is ignored if
isUseGlobalResources()
istrue
or once theLoopResources
is set.- Parameters:
supplier
- the supplier to use
-
setLoopResources
public void setLoopResources(reactor.netty.resources.LoopResources loopResources) Use this option when you want to provide an externally managedLoopResources
instance.- Parameters:
loopResources
- the loop resources to use as is
-
getLoopResources
public reactor.netty.resources.LoopResources getLoopResources()Return the configuredLoopResources
.Lazily tries to start the resources on demand if not initialized yet.
- See Also:
-
setShutdownQuietPeriod
Configure the amount of time we'll wait before shutting down resources. If a task is submitted during theshutdownQuietPeriod
, it is guaranteed to be accepted and theshutdownQuietPeriod
will start over.By default, this is set to
LoopResources.DEFAULT_SHUTDOWN_QUIET_PERIOD
which is 2 seconds but can also be overridden with the system propertyReactorNetty.SHUTDOWN_QUIET_PERIOD
.- See Also:
-
setShutdownTimeout
Configure the maximum amount of time to wait until the disposal of the underlying resources regardless if a task was submitted during theshutdownQuietPeriod
.By default, this is set to
LoopResources.DEFAULT_SHUTDOWN_TIMEOUT
which is 15 seconds but can also be overridden with the system propertyReactorNetty.SHUTDOWN_TIMEOUT
.- See Also:
-
setApplicationContext
Setting anApplicationContext
is optional: If set, Reactor resources will be initialized in thelifecycle start
phase and closed in thelifecycle stop
phase. If not set, it will happen inafterPropertiesSet()
anddestroy()
, respectively.- Specified by:
setApplicationContext
in interfaceApplicationContextAware
- Parameters:
applicationContext
- the ApplicationContext object to be used by this object- See Also:
-
afterPropertiesSet
public void afterPropertiesSet()Starts the resources if initialized outside an ApplicationContext. This is for backwards compatibility; the preferred way is to rely on the ApplicationContext'slifecycle management
.- Specified by:
afterPropertiesSet
in interfaceInitializingBean
- See Also:
-
destroy
public void destroy()Stops the resources if initialized outside an ApplicationContext. This is for backwards compatibility; the preferred way is to rely on the ApplicationContext'slifecycle management
.- Specified by:
destroy
in interfaceDisposableBean
- See Also:
-
start
public void start()Description copied from interface:Lifecycle
Start this component.Should not throw an exception if the component is already running.
In the case of a container, this will propagate the start signal to all components that apply.
-
stop
public void stop()Description copied from interface:Lifecycle
Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method. Consider implementingSmartLifecycle
and itsstop(Runnable)
variant when asynchronous stop behavior is necessary.Note that this stop notification is not guaranteed to come before destruction: On regular shutdown,
Lifecycle
beans will first receive a stop notification before the general destruction callbacks are being propagated; however, on hot refresh during a context's lifetime or on aborted refresh attempts, a given bean's destroy method will be called without any consideration of stop signals upfront.Should not throw an exception if the component is not running (not started yet).
In the case of a container, this will propagate the stop signal to all components that apply.
-
isRunning
public boolean isRunning()Description copied from interface:Lifecycle
Check whether this component is currently running.In the case of a container, this will return
true
only if all components that apply are currently running. -
getPhase
public int getPhase()Description copied from interface:SmartLifecycle
Return the phase that this lifecycle object is supposed to run in.The default implementation returns
SmartLifecycle.DEFAULT_PHASE
in order to letstop()
callbacks execute before regularLifecycle
implementations.- Specified by:
getPhase
in interfacePhased
- Specified by:
getPhase
in interfaceSmartLifecycle
- See Also:
-