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