Class ReactorResourceFactory
- All Implemented Interfaces:
org.springframework.beans.factory.Aware,org.springframework.beans.factory.DisposableBean,org.springframework.beans.factory.InitializingBean,org.springframework.context.ApplicationContextAware,org.springframework.context.Lifecycle,org.springframework.context.Phased,org.springframework.context.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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddGlobalResourcesConsumer(Consumer<reactor.netty.http.HttpResources> consumer) Add a Consumer for configuring the global Reactor Netty resources on startup.voidStarts the resources if initialized outside an ApplicationContext.voiddestroy()Stops the resources if initialized outside an ApplicationContext.reactor.netty.resources.ConnectionProviderReturn the configuredConnectionProvider.reactor.netty.resources.LoopResourcesReturn the configuredLoopResources.intgetPhase()booleanbooleanWhether this factory exposes the globalHttpResourcesholder.voidsetApplicationContext(org.springframework.context.ApplicationContext applicationContext) Setting anApplicationContextis optional: If set, Reactor resources will be initialized in thelifecycle startphase and closed in thelifecycle stopphase.voidsetConnectionProvider(reactor.netty.resources.ConnectionProvider connectionProvider) Use this when you want to provide an externally managedConnectionProviderinstance.voidsetConnectionProviderSupplier(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.voidsetLoopResources(reactor.netty.resources.LoopResources loopResources) Use this option when you want to provide an externally managedLoopResourcesinstance.voidsetLoopResourcesSupplier(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.voidsetShutdownQuietPeriod(Duration shutdownQuietPeriod) Configure the amount of time we'll wait before shutting down resources.voidsetShutdownTimeout(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.voidsetUseGlobalResources(boolean useGlobalResources) Whether to use global Reactor Netty resources viaHttpResources.voidstart()voidstop()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods 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
ApplicationContextlifecycle. 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 globalHttpResourcesholder. -
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()istrueor once theConnectionProvideris 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 managedConnectionProviderinstance.- 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()istrueor once theLoopResourcesis 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 managedLoopResourcesinstance.- 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 theshutdownQuietPeriodwill start over.By default, this is set to
LoopResources.DEFAULT_SHUTDOWN_QUIET_PERIODwhich 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_TIMEOUTwhich is 15 seconds but can also be overridden with the system propertyReactorNetty.SHUTDOWN_TIMEOUT.- See Also:
-
setApplicationContext
public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) Setting anApplicationContextis optional: If set, Reactor resources will be initialized in thelifecycle startphase and closed in thelifecycle stopphase. If not set, it will happen inafterPropertiesSet()anddestroy(), respectively.- Specified by:
setApplicationContextin interfaceorg.springframework.context.ApplicationContextAware
-
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:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- 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:
destroyin interfaceorg.springframework.beans.factory.DisposableBean- See Also:
-
start
public void start()- Specified by:
startin interfaceorg.springframework.context.Lifecycle
-
stop
public void stop()- Specified by:
stopin interfaceorg.springframework.context.Lifecycle
-
isRunning
public boolean isRunning()- Specified by:
isRunningin interfaceorg.springframework.context.Lifecycle
-
getPhase
public int getPhase()- Specified by:
getPhasein interfaceorg.springframework.context.Phased- Specified by:
getPhasein interfaceorg.springframework.context.SmartLifecycle
-