Package org.springframework.boot
Class SpringApplication
java.lang.Object
org.springframework.boot.SpringApplication
Class that can be used to bootstrap and launch a Spring application from a Java main
method. By default class will perform the following steps to bootstrap your
application:
- Create an appropriate
ApplicationContext
instance (depending on your classpath) - Register a
CommandLinePropertySource
to expose command line arguments as Spring properties - Refresh the application context, loading all singleton beans
- Trigger any
CommandLineRunner
beans
run(Class, String[])
method can be called
directly from your main method to bootstrap your application:
@Configuration @EnableAutoConfiguration public class MyApplication { // ... Bean definitions public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
For more advanced configuration a SpringApplication
instance can be created and
customized before being run:
public static void main(String[] args) { SpringApplication application = new SpringApplication(MyApplication.class); // ... customize application settings here application.run(args) }
SpringApplication
s can read beans from a variety of different sources. It is
generally recommended that a single @Configuration
class is used to bootstrap
your application, however, you may also set sources
from:
- The fully qualified class name to be loaded by
AnnotatedBeanDefinitionReader
- The location of an XML resource to be loaded by
XmlBeanDefinitionReader
, or a groovy script to be loaded byGroovyBeanDefinitionReader
- The name of a package to be scanned by
ClassPathBeanDefinitionScanner
SpringApplication
. This makes it
possible to set SpringApplication
properties dynamically, like additional
sources ("spring.main.sources" - a CSV list) the flag to indicate a web environment
("spring.main.web-application-type=none") or the flag to switch off the banner
("spring.main.banner-mode=off").- Since:
- 1.0.0
- Author:
- Phillip Webb, Dave Syer, Andy Wilkinson, Christian Dupuis, Stephane Nicoll, Jeremy Rickard, Craig Burke, Michael Simons, Madhura Bhave, Brian Clozel, Ethan Rubinson, Chris Bono, Moritz Halbritter, Tadaya Tsuyukubo, Yanming Zhou
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Exception that can be thrown to silently exit a runningSpringApplication
without handling run failures.static class
Used to configure and run an augmentedSpringApplication
where additional configuration should be applied.static interface
Provides access to details of aSpringApplication
run usingSpringApplication.Augmented.run(String...)
. -
Field Summary
-
Constructor Summary
ConstructorDescriptionSpringApplication
(Class<?>... primarySources) Create a newSpringApplication
instance.SpringApplication
(ResourceLoader resourceLoader, Class<?>... primarySources) Create a newSpringApplication
instance. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addBootstrapRegistryInitializer
(BootstrapRegistryInitializer bootstrapRegistryInitializer) AddsBootstrapRegistryInitializer
instances that can be used to initialize theBootstrapRegistry
.void
addInitializers
(ApplicationContextInitializer<?>... initializers) AddApplicationContextInitializer
s to be applied to the SpringApplicationContext
.void
addListeners
(ApplicationListener<?>... listeners) AddApplicationListener
s to be applied to the SpringApplication and registered with theApplicationContext
.void
addPrimarySources
(Collection<Class<?>> additionalPrimarySources) Add additional items to the primary sources that will be added to an ApplicationContext whenrun(String...)
is called.protected void
afterRefresh
(ConfigurableApplicationContext context, ApplicationArguments args) Called after the context has been refreshed.protected void
Apply anyApplicationContextInitializer
s to the context before it is refreshed.protected void
bindToSpringApplication
(ConfigurableEnvironment environment) Bind the environment to theSpringApplication
.protected void
configureEnvironment
(ConfigurableEnvironment environment, String[] args) Template method delegating toconfigurePropertySources(ConfigurableEnvironment, String[])
andconfigureProfiles(ConfigurableEnvironment, String[])
in that order.protected void
configureProfiles
(ConfigurableEnvironment environment, String[] args) Configure which profiles are active (or active by default) for this application environment.protected void
configurePropertySources
(ConfigurableEnvironment environment, String[] args) Add, remove or re-order anyPropertySource
s in this application's environment.protected ConfigurableApplicationContext
Strategy method used to create theApplicationContext
.protected org.springframework.boot.BeanDefinitionLoader
createBeanDefinitionLoader
(BeanDefinitionRegistry registry, Object[] sources) Factory method used to create theBeanDefinitionLoader
.static int
exit
(ApplicationContext context, ExitCodeGenerator... exitCodeGenerators) Static helper that can be used to exit aSpringApplication
and obtain a code indicating success (0) or otherwise.static SpringApplication.Augmented
from
(ThrowingConsumer<String[]> main) Create an application from an existingmain
method that can run with additional@Configuration
or bean classes.Return an immutable set of any additional profiles in use.Return an immutable set of all the sources that will be added to an ApplicationContext whenrun(String...)
is called.protected Log
Returns theLog
for the application.Returns theApplicationStartup
used for collecting startup metrics.Either the ClassLoader that will be used in the ApplicationContext (ifresourceLoader
is set), or the context class loader (if not null), or the loader of the SpringClassUtils
class.Return a prefix that should be applied when obtaining configuration properties from the system environment.Returns read-only ordered Set of theApplicationContextInitializer
s that will be applied to the SpringApplicationContext
.Returns read-only ordered Set of theApplicationListener
s that will be applied to the SpringApplication and registered with theApplicationContext
.Class<?>
Returns the main application class that has been deduced or explicitly configured.The ResourceLoader that will be used in the ApplicationContext.Return aSpringApplicationShutdownHandlers
instance that can be used to add or remove handlers that perform actions before the JVM is shutdown.Returns a mutable set of the sources that will be added to an ApplicationContext whenrun(String...)
is called.Returns the type of web application that is being run.boolean
Whether to keep the application alive even if there are no more non-daemon threads.protected void
load
(ApplicationContext context, Object[] sources) Load beans into the application context.protected void
logStartupInfo
(boolean isRoot) Called to log startup information, subclasses may override to add additional logging.protected void
Called to log active profile information.static void
A basic main that can be used to launch an application.protected void
Apply any relevant post-processing to theApplicationContext
.protected void
refresh
(ConfigurableApplicationContext applicationContext) Refresh the underlyingApplicationContext
.protected void
registerLoggedException
(Throwable exception) Register that the given exception has been logged.Static helper that can be used to run aSpringApplication
from the specified sources using default settings and user supplied arguments.Static helper that can be used to run aSpringApplication
from the specified source using default settings.Run the Spring application, creating and refreshing a newApplicationContext
.void
setAddCommandLineProperties
(boolean addCommandLineProperties) Sets if aCommandLinePropertySource
should be added to the application context in order to expose arguments.void
setAddConversionService
(boolean addConversionService) Sets if theApplicationConversionService
should be added to the application context'sEnvironment
.void
setAdditionalProfiles
(String... profiles) Set additional profile values to use (on top of those set in system or command line properties).void
setAllowBeanDefinitionOverriding
(boolean allowBeanDefinitionOverriding) Sets if bean definition overriding, by registering a definition with the same name as an existing definition, should be allowed.void
setAllowCircularReferences
(boolean allowCircularReferences) Sets whether to allow circular references between beans and automatically try to resolve them.void
setApplicationContextFactory
(ApplicationContextFactory applicationContextFactory) Sets the factory that will be called to create the application context.void
setApplicationStartup
(ApplicationStartup applicationStartup) Set theApplicationStartup
to use for collecting startup metrics.void
Sets theBanner
instance which will be used to print the banner when no static banner file is provided.void
setBannerMode
(Banner.Mode bannerMode) Sets the mode used to display the banner when the application runs.void
setBeanNameGenerator
(BeanNameGenerator beanNameGenerator) Sets the bean name generator that should be used when generating bean names.void
setDefaultProperties
(Map<String, Object> defaultProperties) Set default environment properties which will be used in addition to those in the existingEnvironment
.void
setDefaultProperties
(Properties defaultProperties) Convenient alternative tosetDefaultProperties(Map)
.void
setEnvironment
(ConfigurableEnvironment environment) Sets the underlying environment that should be used with the created application context.void
setEnvironmentPrefix
(String environmentPrefix) Set the prefix that should be applied when obtaining configuration properties from the system environment.void
setHeadless
(boolean headless) Sets if the application is headless and should not instantiate AWT.void
setInitializers
(Collection<? extends ApplicationContextInitializer<?>> initializers) Sets theApplicationContextInitializer
that will be applied to the SpringApplicationContext
.void
setKeepAlive
(boolean keepAlive) Set whether to keep the application alive even if there are no more non-daemon threads.void
setLazyInitialization
(boolean lazyInitialization) Sets if beans should be initialized lazily.void
setListeners
(Collection<? extends ApplicationListener<?>> listeners) Sets theApplicationListener
s that will be applied to the SpringApplication and registered with theApplicationContext
.void
setLogStartupInfo
(boolean logStartupInfo) Sets if the application information should be logged when the application starts.void
setMainApplicationClass
(Class<?> mainApplicationClass) Set a specific main application class that will be used as a log source and to obtain version information.void
setRegisterShutdownHook
(boolean registerShutdownHook) Sets if the createdApplicationContext
should have a shutdown hook registered.void
setResourceLoader
(ResourceLoader resourceLoader) Sets theResourceLoader
that should be used when loading resources.void
setSources
(Set<String> sources) Set additional sources that will be used to create an ApplicationContext.void
setWebApplicationType
(WebApplicationType webApplicationType) Sets the type of web application to be run.static void
withHook
(SpringApplicationHook hook, Runnable action) Perform the given action with the givenSpringApplicationHook
attached if the action triggers anapplication run
.static <T> T
withHook
(SpringApplicationHook hook, ThrowingSupplier<T> action) Perform the given action with the givenSpringApplicationHook
attached if the action triggers anapplication run
.
-
Field Details
-
BANNER_LOCATION_PROPERTY_VALUE
Default banner location.- See Also:
-
BANNER_LOCATION_PROPERTY
Banner location property key.- See Also:
-
-
Constructor Details
-
SpringApplication
Create a newSpringApplication
instance. The application context will load beans from the specified primary sources (seeclass-level
documentation for details). The instance can be customized before callingrun(String...)
.- Parameters:
primarySources
- the primary bean sources- See Also:
-
SpringApplication
Create a newSpringApplication
instance. The application context will load beans from the specified primary sources (seeclass-level
documentation for details). The instance can be customized before callingrun(String...)
.- Parameters:
resourceLoader
- the resource loader to useprimarySources
- the primary bean sources- See Also:
-
-
Method Details
-
run
Run the Spring application, creating and refreshing a newApplicationContext
.- Parameters:
args
- the application arguments (usually passed from a Java main method)- Returns:
- a running
ApplicationContext
-
configureEnvironment
Template method delegating toconfigurePropertySources(ConfigurableEnvironment, String[])
andconfigureProfiles(ConfigurableEnvironment, String[])
in that order. Override this method for complete control over Environment customization, or one of the above for fine-grained control over property sources or profiles, respectively.- Parameters:
environment
- this application's environmentargs
- arguments passed to therun
method- See Also:
-
configurePropertySources
Add, remove or re-order anyPropertySource
s in this application's environment.- Parameters:
environment
- this application's environmentargs
- arguments passed to therun
method- See Also:
-
configureProfiles
Configure which profiles are active (or active by default) for this application environment. Additional profiles may be activated during configuration file processing through thespring.profiles.active
property.- Parameters:
environment
- this application's environmentargs
- arguments passed to therun
method- See Also:
-
bindToSpringApplication
Bind the environment to theSpringApplication
.- Parameters:
environment
- the environment to bind
-
createApplicationContext
Strategy method used to create theApplicationContext
. By default this method will respect any explicitly set application context class or factory before falling back to a suitable default.- Returns:
- the application context (not yet refreshed)
- See Also:
-
postProcessApplicationContext
Apply any relevant post-processing to theApplicationContext
. Subclasses can apply additional processing as required.- Parameters:
context
- the application context
-
applyInitializers
Apply anyApplicationContextInitializer
s to the context before it is refreshed.- Parameters:
context
- the configured ApplicationContext (not refreshed yet)- See Also:
-
logStartupInfo
protected void logStartupInfo(boolean isRoot) Called to log startup information, subclasses may override to add additional logging.- Parameters:
isRoot
- true if this application is the root of a context hierarchy
-
logStartupProfileInfo
Called to log active profile information.- Parameters:
context
- the application context
-
getApplicationLog
Returns theLog
for the application. By default will be deduced.- Returns:
- the application log
-
load
Load beans into the application context.- Parameters:
context
- the context to load beans intosources
- the sources to load
-
getResourceLoader
The ResourceLoader that will be used in the ApplicationContext.- Returns:
- the resourceLoader the resource loader that will be used in the ApplicationContext (or null if the default)
-
getClassLoader
Either the ClassLoader that will be used in the ApplicationContext (ifresourceLoader
is set), or the context class loader (if not null), or the loader of the SpringClassUtils
class.- Returns:
- a ClassLoader (never null)
-
createBeanDefinitionLoader
protected org.springframework.boot.BeanDefinitionLoader createBeanDefinitionLoader(BeanDefinitionRegistry registry, Object[] sources) Factory method used to create theBeanDefinitionLoader
.- Parameters:
registry
- the bean definition registrysources
- the sources to load- Returns:
- the
BeanDefinitionLoader
that will be used to load beans
-
refresh
Refresh the underlyingApplicationContext
.- Parameters:
applicationContext
- the application context to refresh
-
afterRefresh
Called after the context has been refreshed.- Parameters:
context
- the application contextargs
- the application arguments
-
registerLoggedException
Register that the given exception has been logged. By default, if the running in the main thread, this method will suppress additional printing of the stacktrace.- Parameters:
exception
- the exception that was logged
-
getMainApplicationClass
Returns the main application class that has been deduced or explicitly configured.- Returns:
- the main application class or
null
-
setMainApplicationClass
Set a specific main application class that will be used as a log source and to obtain version information. By default the main application class will be deduced. Can be set tonull
if there is no explicit application class.- Parameters:
mainApplicationClass
- the mainApplicationClass to set ornull
-
getWebApplicationType
Returns the type of web application that is being run.- Returns:
- the type of web application
- Since:
- 2.0.0
-
setWebApplicationType
Sets the type of web application to be run. If not explicitly set the type of web application will be deduced based on the classpath.- Parameters:
webApplicationType
- the web application type- Since:
- 2.0.0
-
setAllowBeanDefinitionOverriding
public void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding) Sets if bean definition overriding, by registering a definition with the same name as an existing definition, should be allowed. Defaults tofalse
.- Parameters:
allowBeanDefinitionOverriding
- if overriding is allowed- Since:
- 2.1.0
- See Also:
-
setAllowCircularReferences
public void setAllowCircularReferences(boolean allowCircularReferences) Sets whether to allow circular references between beans and automatically try to resolve them. Defaults tofalse
.- Parameters:
allowCircularReferences
- if circular references are allowed- Since:
- 2.6.0
- See Also:
-
setLazyInitialization
public void setLazyInitialization(boolean lazyInitialization) Sets if beans should be initialized lazily. Defaults tofalse
.- Parameters:
lazyInitialization
- if initialization should be lazy- Since:
- 2.2
- See Also:
-
setHeadless
public void setHeadless(boolean headless) Sets if the application is headless and should not instantiate AWT. Defaults totrue
to prevent java icons appearing.- Parameters:
headless
- if the application is headless
-
setRegisterShutdownHook
public void setRegisterShutdownHook(boolean registerShutdownHook) Sets if the createdApplicationContext
should have a shutdown hook registered. Defaults totrue
to ensure that JVM shutdowns are handled gracefully.- Parameters:
registerShutdownHook
- if the shutdown hook should be registered- See Also:
-
setBanner
Sets theBanner
instance which will be used to print the banner when no static banner file is provided.- Parameters:
banner
- the Banner instance to use
-
setBannerMode
Sets the mode used to display the banner when the application runs. Defaults toBanner.Mode.CONSOLE
.- Parameters:
bannerMode
- the mode used to display the banner
-
setLogStartupInfo
public void setLogStartupInfo(boolean logStartupInfo) Sets if the application information should be logged when the application starts. Defaults totrue
.- Parameters:
logStartupInfo
- if startup info should be logged.
-
setAddCommandLineProperties
public void setAddCommandLineProperties(boolean addCommandLineProperties) Sets if aCommandLinePropertySource
should be added to the application context in order to expose arguments. Defaults totrue
.- Parameters:
addCommandLineProperties
- if command line arguments should be exposed
-
setAddConversionService
public void setAddConversionService(boolean addConversionService) Sets if theApplicationConversionService
should be added to the application context'sEnvironment
.- Parameters:
addConversionService
- if the application conversion service should be added- Since:
- 2.1.0
-
addBootstrapRegistryInitializer
public void addBootstrapRegistryInitializer(BootstrapRegistryInitializer bootstrapRegistryInitializer) AddsBootstrapRegistryInitializer
instances that can be used to initialize theBootstrapRegistry
.- Parameters:
bootstrapRegistryInitializer
- the bootstrap registry initializer to add- Since:
- 2.4.5
-
setDefaultProperties
Set default environment properties which will be used in addition to those in the existingEnvironment
.- Parameters:
defaultProperties
- the additional properties to set
-
setDefaultProperties
Convenient alternative tosetDefaultProperties(Map)
.- Parameters:
defaultProperties
- someProperties
-
setAdditionalProfiles
Set additional profile values to use (on top of those set in system or command line properties).- Parameters:
profiles
- the additional profiles to set
-
getAdditionalProfiles
Return an immutable set of any additional profiles in use.- Returns:
- the additional profiles
-
setBeanNameGenerator
Sets the bean name generator that should be used when generating bean names.- Parameters:
beanNameGenerator
- the bean name generator
-
setEnvironment
Sets the underlying environment that should be used with the created application context.- Parameters:
environment
- the environment
-
addPrimarySources
Add additional items to the primary sources that will be added to an ApplicationContext whenrun(String...)
is called.The sources here are added to those that were set in the constructor. Most users should consider using
getSources()
/setSources(Set)
rather than calling this method.- Parameters:
additionalPrimarySources
- the additional primary sources to add- See Also:
-
getSources
Returns a mutable set of the sources that will be added to an ApplicationContext whenrun(String...)
is called.Sources set here will be used in addition to any primary sources set in the constructor.
- Returns:
- the application sources.
- See Also:
-
setSources
Set additional sources that will be used to create an ApplicationContext. A source can be: a class name, package name, or an XML resource location.Sources set here will be used in addition to any primary sources set in the constructor.
- Parameters:
sources
- the application sources to set- See Also:
-
getAllSources
Return an immutable set of all the sources that will be added to an ApplicationContext whenrun(String...)
is called. This method combines any primary sources specified in the constructor with any additional ones that have beenexplicitly set
.- Returns:
- an immutable set of all sources
-
setResourceLoader
Sets theResourceLoader
that should be used when loading resources.- Parameters:
resourceLoader
- the resource loader
-
getEnvironmentPrefix
Return a prefix that should be applied when obtaining configuration properties from the system environment.- Returns:
- the environment property prefix
- Since:
- 2.5.0
-
setEnvironmentPrefix
Set the prefix that should be applied when obtaining configuration properties from the system environment.- Parameters:
environmentPrefix
- the environment property prefix to set- Since:
- 2.5.0
-
setApplicationContextFactory
Sets the factory that will be called to create the application context. If not set, defaults to a factory that will createAnnotationConfigServletWebServerApplicationContext
for servlet web applications,AnnotationConfigReactiveWebServerApplicationContext
for reactive web applications, andAnnotationConfigApplicationContext
for non-web applications.- Parameters:
applicationContextFactory
- the factory for the context- Since:
- 2.4.0
-
setInitializers
Sets theApplicationContextInitializer
that will be applied to the SpringApplicationContext
.- Parameters:
initializers
- the initializers to set
-
addInitializers
AddApplicationContextInitializer
s to be applied to the SpringApplicationContext
.- Parameters:
initializers
- the initializers to add
-
getInitializers
Returns read-only ordered Set of theApplicationContextInitializer
s that will be applied to the SpringApplicationContext
.- Returns:
- the initializers
-
setListeners
Sets theApplicationListener
s that will be applied to the SpringApplication and registered with theApplicationContext
.- Parameters:
listeners
- the listeners to set
-
addListeners
AddApplicationListener
s to be applied to the SpringApplication and registered with theApplicationContext
.- Parameters:
listeners
- the listeners to add
-
getListeners
Returns read-only ordered Set of theApplicationListener
s that will be applied to the SpringApplication and registered with theApplicationContext
.- Returns:
- the listeners
-
setApplicationStartup
Set theApplicationStartup
to use for collecting startup metrics.- Parameters:
applicationStartup
- the application startup to use- Since:
- 2.4.0
-
getApplicationStartup
Returns theApplicationStartup
used for collecting startup metrics.- Returns:
- the application startup
- Since:
- 2.4.0
-
isKeepAlive
public boolean isKeepAlive()Whether to keep the application alive even if there are no more non-daemon threads.- Returns:
- whether to keep the application alive even if there are no more non-daemon threads
- Since:
- 3.2.0
-
setKeepAlive
public void setKeepAlive(boolean keepAlive) Set whether to keep the application alive even if there are no more non-daemon threads.- Parameters:
keepAlive
- whether to keep the application alive even if there are no more non-daemon threads- Since:
- 3.2.0
-
getShutdownHandlers
Return aSpringApplicationShutdownHandlers
instance that can be used to add or remove handlers that perform actions before the JVM is shutdown.- Returns:
- a
SpringApplicationShutdownHandlers
instance - Since:
- 2.5.1
-
run
Static helper that can be used to run aSpringApplication
from the specified source using default settings.- Parameters:
primarySource
- the primary source to loadargs
- the application arguments (usually passed from a Java main method)- Returns:
- the running
ApplicationContext
-
run
Static helper that can be used to run aSpringApplication
from the specified sources using default settings and user supplied arguments.- Parameters:
primarySources
- the primary sources to loadargs
- the application arguments (usually passed from a Java main method)- Returns:
- the running
ApplicationContext
-
main
A basic main that can be used to launch an application. This method is useful when application sources are defined through a --spring.main.sources command line argument.Most developers will want to define their own main method and call the
run
method instead.- Parameters:
args
- command line arguments- Throws:
Exception
- if the application cannot be started- See Also:
-
exit
Static helper that can be used to exit aSpringApplication
and obtain a code indicating success (0) or otherwise. Does not throw exceptions but should print stack traces of any encountered. Applies the specifiedExitCodeGenerators
in addition to any Spring beans that implementExitCodeGenerator
. When multiple generators are available, the first non-zero exit code is used. Generators are ordered based on theirOrdered
implementation and@Order
annotation.- Parameters:
context
- the context to close if possibleexitCodeGenerators
- exit code generators- Returns:
- the outcome (0 if successful)
-
from
Create an application from an existingmain
method that can run with additional@Configuration
or bean classes. This method can be helpful when writing a test harness that needs to start an application with additional configuration.- Parameters:
main
- the main method entry point that runs theSpringApplication
- Returns:
- a
SpringApplication.Augmented
instance that can be used to add configuration and run the application - Since:
- 3.1.0
- See Also:
-
withHook
Perform the given action with the givenSpringApplicationHook
attached if the action triggers anapplication run
.- Parameters:
hook
- the hook to applyaction
- the action to run- Since:
- 3.0.0
- See Also:
-
withHook
Perform the given action with the givenSpringApplicationHook
attached if the action triggers anapplication run
.- Type Parameters:
T
- the result type- Parameters:
hook
- the hook to applyaction
- the action to run- Returns:
- the result of the action
- Since:
- 3.0.0
- See Also:
-