Commit 87b0cea6 authored by Phillip Webb's avatar Phillip Webb Committed by Phillip Webb

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
parent 76bda7e3
......@@ -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());
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment