Pass args to SpringApplicationInitializers
Change SpringApplicationInitializer interface to include run() args. Allow initializers to make additional configurations based on the user supplied arguments. Issue: #55202588
This commit is contained in:
parent
76bda7e3b4
commit
87b0cea6f6
|
@ -211,8 +211,13 @@ public class SpringApplication {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@link ApplicationContextInitializer} loaded via the
|
||||
* {@link SpringFactoriesLoader}. Subclasses can override this method to modify
|
||||
* default initializers if necessary.
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
private Collection<ApplicationContextInitializer<?>> getSpringFactoriesApplicationContextInitializers() {
|
||||
protected Collection<ApplicationContextInitializer<?>> getSpringFactoriesApplicationContextInitializers() {
|
||||
return (Collection) SpringFactoriesLoader.loadFactories(
|
||||
ApplicationContextInitializer.class,
|
||||
SpringApplication.class.getClassLoader());
|
||||
|
@ -241,14 +246,14 @@ public class SpringApplication {
|
|||
*/
|
||||
public ApplicationContext run(String... args) {
|
||||
// Call all non environment aware initializers very early
|
||||
callNonEnvironmentAwareSpringApplicationInitializers();
|
||||
callNonEnvironmentAwareSpringApplicationInitializers(args);
|
||||
|
||||
// Create and configure the environment
|
||||
ConfigurableEnvironment environment = getOrCreateEnvironment();
|
||||
addPropertySources(environment, args);
|
||||
|
||||
// Call all remaining initializers
|
||||
callEnvironmentAwareSpringApplicationInitializers(environment);
|
||||
callEnvironmentAwareSpringApplicationInitializers(args, environment);
|
||||
Set<Object> sources = assembleSources();
|
||||
Assert.notEmpty(sources, "Sources must not be empty");
|
||||
if (this.showBanner) {
|
||||
|
@ -281,11 +286,11 @@ public class SpringApplication {
|
|||
return sources;
|
||||
}
|
||||
|
||||
private void callNonEnvironmentAwareSpringApplicationInitializers() {
|
||||
private void callNonEnvironmentAwareSpringApplicationInitializers(String[] args) {
|
||||
for (ApplicationContextInitializer<?> initializer : this.initializers) {
|
||||
if (initializer instanceof SpringApplicationInitializer
|
||||
&& !(initializer instanceof EnvironmentAware)) {
|
||||
((SpringApplicationInitializer) initializer).initialize(this);
|
||||
((SpringApplicationInitializer) initializer).initialize(this, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -322,13 +327,13 @@ public class SpringApplication {
|
|||
}
|
||||
}
|
||||
|
||||
private void callEnvironmentAwareSpringApplicationInitializers(
|
||||
private void callEnvironmentAwareSpringApplicationInitializers(String[] args,
|
||||
ConfigurableEnvironment environment) {
|
||||
for (ApplicationContextInitializer<?> initializer : this.initializers) {
|
||||
if (initializer instanceof SpringApplicationInitializer
|
||||
&& initializer instanceof EnvironmentAware) {
|
||||
((EnvironmentAware) initializer).setEnvironment(environment);
|
||||
((SpringApplicationInitializer) initializer).initialize(this);
|
||||
((SpringApplicationInitializer) initializer).initialize(this, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,8 @@ public interface SpringApplicationInitializer {
|
|||
/**
|
||||
* Initialize the application
|
||||
* @param springApplication the spring application.
|
||||
* @param args the run arguments
|
||||
*/
|
||||
void initialize(SpringApplication springApplication);
|
||||
void initialize(SpringApplication springApplication, String[] args);
|
||||
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ public class ConfigFileApplicationContextInitializer implements
|
|||
* ("spring.main.show_banner=false").
|
||||
*/
|
||||
@Override
|
||||
public void initialize(SpringApplication springApplication) {
|
||||
public void initialize(SpringApplication springApplication, String[] args) {
|
||||
if (this.environment instanceof ConfigurableEnvironment) {
|
||||
ConfigurableEnvironment environment = (ConfigurableEnvironment) this.environment;
|
||||
load(environment, new DefaultResourceLoader());
|
||||
|
|
|
@ -45,6 +45,7 @@ public class EnvironmentDelegateApplicationContextInitializer implements
|
|||
// NOTE: Similar to org.springframework.web.context.ContextLoader
|
||||
|
||||
private static final String PROPERTY_NAME = "context.initializer.classes";
|
||||
|
||||
private int order = 0;
|
||||
|
||||
@Override
|
||||
|
|
|
@ -81,7 +81,7 @@ public class LoggingApplicationContextInitializer implements
|
|||
private int order = Integer.MIN_VALUE + 11;
|
||||
|
||||
@Override
|
||||
public void initialize(SpringApplication springApplication) {
|
||||
public void initialize(SpringApplication springApplication, String[] args) {
|
||||
if (System.getProperty("PID") == null) {
|
||||
System.setProperty("PID", getPid());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue