From 3dacf4be17bb22a6c8124e75ebb492550e4a9538 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 7 Jan 2014 15:52:25 +0000 Subject: [PATCH] Migrate Logging and Liquibase initializers to be listeners --- ...agementSecurityAutoConfigurationTests.java | 4 +- .../web/DefaultErrorViewIntegrationTests.java | 4 +- .../SecurityAutoConfigurationTests.java | 4 +- .../boot/SpringApplication.java | 11 ++- .../SpringApplicationBeforeRefreshEvent.java | 69 +++++++++++++++++++ ...ApplicationEnvironmentAvailableEvent.java} | 9 +-- ...nfigFileApplicationContextInitializer.java | 6 +- .../LoggingApplicationListener.java} | 66 +++++++++++++----- .../LiquibaseServiceLocatorInitializer.java | 7 -- .../main/resources/META-INF/spring.factories | 7 +- .../SpringApplicationBuilderTests.java | 6 +- ...ileApplicationContextInitializerTests.java | 4 +- .../LoggingApplicationListenerTests.java} | 44 +++++++----- 13 files changed, 175 insertions(+), 66 deletions(-) create mode 100644 spring-boot/src/main/java/org/springframework/boot/SpringApplicationBeforeRefreshEvent.java rename spring-boot/src/main/java/org/springframework/boot/{SpringApplicationNewEnvironmentEvent.java => SpringApplicationEnvironmentAvailableEvent.java} (84%) rename spring-boot/src/main/java/org/springframework/boot/context/{initializer/LoggingApplicationContextInitializer.java => listener/LoggingApplicationListener.java} (76%) rename spring-boot/src/test/java/org/springframework/boot/context/{initializer/LoggingApplicationContextInitializerTests.java => listener/LoggingApplicationListenerTests.java} (80%) diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java index dec634cac72..3597a9f42e1 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java @@ -23,7 +23,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurationReportLoggingInit import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration; -import org.springframework.boot.context.initializer.LoggingApplicationContextInitializer; +import org.springframework.boot.context.listener.LoggingApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextRefreshedEvent; @@ -170,7 +170,7 @@ public class ManagementSecurityAutoConfigurationTests { private static AnnotationConfigWebApplicationContext debugRefresh( AnnotationConfigWebApplicationContext context) { TestUtils.addEnviroment(context, "debug:true"); - LoggingApplicationContextInitializer logging = new LoggingApplicationContextInitializer(); + LoggingApplicationListener logging = new LoggingApplicationListener(); logging.initialize(context); AutoConfigurationReportLoggingInitializer initializer = new AutoConfigurationReportLoggingInitializer(); initializer.initialize(context); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/DefaultErrorViewIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/DefaultErrorViewIntegrationTests.java index 265526de8a0..a0dd12aa9d2 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/DefaultErrorViewIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/DefaultErrorViewIntegrationTests.java @@ -23,7 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.actuate.web.DefaultErrorViewIntegrationTests.TestConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.context.initializer.LoggingApplicationContextInitializer; +import org.springframework.boot.context.listener.LoggingApplicationListener; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.test.context.ContextConfiguration; @@ -41,7 +41,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. /** * @author Dave Syer */ -@ContextConfiguration(classes = TestConfiguration.class, initializers = { LoggingApplicationContextInitializer.class }) +@ContextConfiguration(classes = TestConfiguration.class, initializers = { LoggingApplicationListener.class }) @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration public class DefaultErrorViewIntegrationTests { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java index 68bb1846ff5..d0adc5d9299 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java @@ -24,7 +24,7 @@ import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfigurati import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.test.City; -import org.springframework.boot.context.initializer.LoggingApplicationContextInitializer; +import org.springframework.boot.context.listener.LoggingApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -117,7 +117,7 @@ public class SecurityAutoConfigurationTests { private static AnnotationConfigWebApplicationContext debugRefresh( AnnotationConfigWebApplicationContext context) { TestUtils.addEnviroment(context, "debug:true"); - LoggingApplicationContextInitializer logging = new LoggingApplicationContextInitializer(); + LoggingApplicationListener logging = new LoggingApplicationListener(); logging.initialize(context); AutoConfigurationReportLoggingInitializer initializer = new AutoConfigurationReportLoggingInitializer(); initializer.initialize(context); diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index 8740d2f1641..9bb7cd3977e 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -320,17 +320,19 @@ public class SpringApplication { } // Notify listeners of the environment creation - multicaster.multicastEvent(new SpringApplicationNewEnvironmentEvent(this, - environment, args)); + multicaster.multicastEvent(new SpringApplicationEnvironmentAvailableEvent( + this, environment, args)); // Sources might have changed when environment was applied sources = getSources(); - registerListeners(multicaster, sources); Assert.notEmpty(sources, "Sources must not be empty"); if (this.showBanner) { printBanner(); } + // Some sources might be listeners + registerListeners(multicaster, sources); + // Create, load, refresh and run the ApplicationContext context = createApplicationContext(); registerApplicationEventMulticaster(context, multicaster); @@ -343,6 +345,9 @@ public class SpringApplication { } load(context, sources.toArray(new Object[sources.size()])); + // Notify listeners of intention to refresh + multicaster.multicastEvent(new SpringApplicationBeforeRefreshEvent(this, + context, args)); refresh(context); stopWatch.stop(); diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplicationBeforeRefreshEvent.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplicationBeforeRefreshEvent.java new file mode 100644 index 00000000000..449fee45db3 --- /dev/null +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplicationBeforeRefreshEvent.java @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.Environment; + +/** + * Event published as when a {@link SpringApplication} is starting up and the + * {@link ApplicationContext} is about to refresh. The bean definitions will be loaded and + * the {@link Environment} is ready for use at this stage. + * + * @author Dave Syer + */ +public class SpringApplicationBeforeRefreshEvent extends ApplicationEvent { + + private String[] args; + private ConfigurableApplicationContext context; + + /** + * @param springApplication the current application + * @param context the ApplicationContext about to be refreshed + * @param args the argumemts the application is running with + */ + public SpringApplicationBeforeRefreshEvent(SpringApplication springApplication, + ConfigurableApplicationContext context, String[] args) { + super(springApplication); + this.context = context; + this.args = args; + } + + /** + * @return the springApplication + */ + public SpringApplication getSpringApplication() { + return (SpringApplication) getSource(); + } + + /** + * @return the args + */ + public String[] getArgs() { + return this.args; + } + + /** + * @return the context + */ + public ConfigurableApplicationContext getApplicationContext() { + return this.context; + } + +} diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplicationNewEnvironmentEvent.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplicationEnvironmentAvailableEvent.java similarity index 84% rename from spring-boot/src/main/java/org/springframework/boot/SpringApplicationNewEnvironmentEvent.java rename to spring-boot/src/main/java/org/springframework/boot/SpringApplicationEnvironmentAvailableEvent.java index 3d7feccc90e..ac9e80be137 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplicationNewEnvironmentEvent.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplicationEnvironmentAvailableEvent.java @@ -21,12 +21,12 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; /** - * Event published as early when a {@link SpringApplication} is starting up and the + * Event published when a {@link SpringApplication} is starting up and the * {@link Environment} is first available for inspection and modification. * * @author Dave Syer */ -public class SpringApplicationNewEnvironmentEvent extends ApplicationEvent { +public class SpringApplicationEnvironmentAvailableEvent extends ApplicationEvent { private ConfigurableEnvironment environment; private String[] args; @@ -36,8 +36,9 @@ public class SpringApplicationNewEnvironmentEvent extends ApplicationEvent { * @param environment the environment that was just created * @param args the argumemts the application is running with */ - public SpringApplicationNewEnvironmentEvent(SpringApplication springApplication, - ConfigurableEnvironment environment, String[] args) { + public SpringApplicationEnvironmentAvailableEvent( + SpringApplication springApplication, ConfigurableEnvironment environment, + String[] args) { super(springApplication); this.environment = environment; this.args = args; diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java index 72d5092d6c2..b0429f10412 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java @@ -30,7 +30,7 @@ import java.util.Set; import org.springframework.beans.PropertyValues; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.SpringApplication; -import org.springframework.boot.SpringApplicationNewEnvironmentEvent; +import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent; import org.springframework.boot.bind.PropertySourcesPropertyValues; import org.springframework.boot.bind.RelaxedDataBinder; import org.springframework.boot.config.PropertiesPropertySourceLoader; @@ -89,7 +89,7 @@ import org.springframework.util.StringUtils; */ public class ConfigFileApplicationContextInitializer implements ApplicationContextInitializer, - ApplicationListener, Ordered { + ApplicationListener, Ordered { private static final String LOCATION_VARIABLE = "${spring.config.location}"; @@ -114,7 +114,7 @@ public class ConfigFileApplicationContextInitializer implements * ("spring.main.show_banner=false"). */ @Override - public void onApplicationEvent(SpringApplicationNewEnvironmentEvent event) { + public void onApplicationEvent(SpringApplicationEnvironmentAvailableEvent event) { Environment created = event.getEnvironment(); if (created instanceof ConfigurableEnvironment) { SpringApplication springApplication = event.getSpringApplication(); diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/listener/LoggingApplicationListener.java similarity index 76% rename from spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java rename to spring-boot/src/main/java/org/springframework/boot/context/listener/LoggingApplicationListener.java index 43e07fb3c23..7a5b73bc1c3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/listener/LoggingApplicationListener.java @@ -14,24 +14,29 @@ * limitations under the License. */ -package org.springframework.boot.context.initializer; +package org.springframework.boot.context.listener; import java.lang.management.ManagementFactory; +import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.SpringApplicationBeforeRefreshEvent; +import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent; import org.springframework.boot.SpringApplicationStartEvent; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggingSystem; import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ApplicationListener; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.Ordered; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.event.SmartApplicationListener; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; +import org.springframework.util.ClassUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.ResourceUtils; @@ -50,7 +55,7 @@ import org.springframework.util.ResourceUtils; * logback; and classpath:logging.properties for * java.util.logging. If the correct one of those files is not found then * some sensible defaults are adopted from files of the same name but in the package - * containing {@link LoggingApplicationContextInitializer}. + * containing {@link LoggingApplicationListener}. *

* *

@@ -68,9 +73,7 @@ import org.springframework.util.ResourceUtils; * @author Dave Syer * @author Phillip Webb */ -public class LoggingApplicationContextInitializer implements - ApplicationContextInitializer, - ApplicationListener, Ordered { +public class LoggingApplicationListener implements SmartApplicationListener { private static final Map ENVIRONMENT_SYSTEM_PROPERTY_MAPPING; static { @@ -90,6 +93,12 @@ public class LoggingApplicationContextInitializer implements LOG_LEVEL_LOGGERS.add(LogLevel.TRACE, "org.hibernate.tool.hbm2ddl"); } + @SuppressWarnings("unchecked") + private static Collection> EVENT_TYPES = Arrays + .> asList( + SpringApplicationStartEvent.class, + SpringApplicationBeforeRefreshEvent.class); + private final Log logger = LogFactory.getLog(getClass()); private int order = Integer.MIN_VALUE + 11; @@ -99,23 +108,42 @@ public class LoggingApplicationContextInitializer implements private LogLevel springBootLogging = null; @Override - public void onApplicationEvent(SpringApplicationStartEvent event) { - if (System.getProperty("PID") == null) { - System.setProperty("PID", getPid()); + public boolean supportsEventType(Class eventType) { + for (Class type : EVENT_TYPES) { + if (type.isAssignableFrom(eventType)) { + return true; + } + } + return false; + } + + @Override + public boolean supportsSourceType(Class sourceType) { + return SpringApplication.class.isAssignableFrom(sourceType); + } + + @Override + public void onApplicationEvent(ApplicationEvent event) { + if (event instanceof SpringApplicationEnvironmentAvailableEvent) { + SpringApplicationEnvironmentAvailableEvent available = (SpringApplicationEnvironmentAvailableEvent) event; + initialize(available.getEnvironment(), available.getSpringApplication() + .getClassLoader()); + } + else { + if (System.getProperty("PID") == null) { + System.setProperty("PID", getPid()); + } + LoggingSystem loggingSystem = LoggingSystem.get(ClassUtils + .getDefaultClassLoader()); + loggingSystem.beforeInitialize(); } - LoggingSystem loggingSystem = LoggingSystem.get(event.getSpringApplication() - .getClass().getClassLoader()); - loggingSystem.beforeInitialize(); } /** * Initialize the logging system according to preferences expressed through the * {@link Environment} and the classpath. */ - @Override - public void initialize(ConfigurableApplicationContext applicationContext) { - - ConfigurableEnvironment environment = applicationContext.getEnvironment(); + protected void initialize(ConfigurableEnvironment environment, ClassLoader classLoader) { if (this.parseArgs && this.springBootLogging == null) { if (environment.containsProperty("debug")) { @@ -134,7 +162,7 @@ public class LoggingApplicationContextInitializer implements } } - LoggingSystem system = LoggingSystem.get(applicationContext.getClassLoader()); + LoggingSystem system = LoggingSystem.get(classLoader); // User specified configuration if (environment.containsProperty("logging.config")) { diff --git a/spring-boot/src/main/java/org/springframework/boot/liquibase/LiquibaseServiceLocatorInitializer.java b/spring-boot/src/main/java/org/springframework/boot/liquibase/LiquibaseServiceLocatorInitializer.java index 4c8b9e22676..d719de24fd8 100644 --- a/spring-boot/src/main/java/org/springframework/boot/liquibase/LiquibaseServiceLocatorInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/liquibase/LiquibaseServiceLocatorInitializer.java @@ -6,9 +6,7 @@ import liquibase.servicelocator.ServiceLocator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.SpringApplicationStartEvent; -import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ApplicationListener; -import org.springframework.context.ConfigurableApplicationContext; import org.springframework.util.ClassUtils; /** @@ -19,7 +17,6 @@ import org.springframework.util.ClassUtils; * @author Dave Syer */ public class LiquibaseServiceLocatorInitializer implements - ApplicationContextInitializer, ApplicationListener { static final Log logger = LogFactory.getLog(LiquibaseServiceLocatorInitializer.class); @@ -31,10 +28,6 @@ public class LiquibaseServiceLocatorInitializer implements } } - @Override - public void initialize(ConfigurableApplicationContext applicationContext) { - } - /** * Inner class to prevent class not found issues */ diff --git a/spring-boot/src/main/resources/META-INF/spring.factories b/spring-boot/src/main/resources/META-INF/spring.factories index 221f23943d3..2f939a398de 100644 --- a/spring-boot/src/main/resources/META-INF/spring.factories +++ b/spring-boot/src/main/resources/META-INF/spring.factories @@ -4,6 +4,9 @@ org.springframework.boot.context.initializer.ConfigFileApplicationContextInitial org.springframework.boot.context.initializer.FileEncodingApplicationContextInitializer,\ org.springframework.boot.context.initializer.ContextIdApplicationContextInitializer,\ org.springframework.boot.context.initializer.EnvironmentDelegateApplicationContextInitializer,\ -org.springframework.boot.context.initializer.LoggingApplicationContextInitializer,\ -org.springframework.boot.context.initializer.VcapApplicationContextInitializer,\ +org.springframework.boot.context.initializer.VcapApplicationContextInitializer + +# Application Listeners +org.springframework.context.ApplicationListener=\ +org.springframework.boot.context.listener.LoggingApplicationListener,\ org.springframework.boot.liquibase.LiquibaseServiceLocatorInitializer diff --git a/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java b/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java index 5deadc6487d..f42ba4b6b0d 100644 --- a/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java @@ -176,7 +176,7 @@ public class SpringApplicationBuilderTests { SpringApplicationBuilder application = new SpringApplicationBuilder( ExampleConfig.class).web(false); this.context = application.run(); - assertEquals(7, application.application().getInitializers().size()); + assertEquals(5, application.application().getInitializers().size()); } @Test @@ -184,7 +184,7 @@ public class SpringApplicationBuilderTests { SpringApplicationBuilder application = new SpringApplicationBuilder( ExampleConfig.class).child(ChildConfig.class).web(false); this.context = application.run(); - assertEquals(8, application.application().getInitializers().size()); + assertEquals(6, application.application().getInitializers().size()); } @Test @@ -198,7 +198,7 @@ public class SpringApplicationBuilderTests { } }); this.context = application.run(); - assertEquals(8, application.application().getInitializers().size()); + assertEquals(6, application.application().getInitializers().size()); } @Configuration diff --git a/spring-boot/src/test/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializerTests.java b/spring-boot/src/test/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializerTests.java index 0146b63f9c2..6fd55b5bb88 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializerTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializerTests.java @@ -22,7 +22,7 @@ import java.util.Map; import org.junit.After; import org.junit.Test; import org.springframework.boot.SpringApplication; -import org.springframework.boot.SpringApplicationNewEnvironmentEvent; +import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @@ -67,7 +67,7 @@ public class ConfigFileApplicationContextInitializerTests { @Test public void randomValue() throws Exception { StandardEnvironment environment = new StandardEnvironment(); - this.initializer.onApplicationEvent(new SpringApplicationNewEnvironmentEvent( + this.initializer.onApplicationEvent(new SpringApplicationEnvironmentAvailableEvent( new SpringApplication(), environment, new String[0])); String property = environment.getProperty("random.value"); assertThat(property, notNullValue()); diff --git a/spring-boot/src/test/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializerTests.java b/spring-boot/src/test/java/org/springframework/boot/context/listener/LoggingApplicationListenerTests.java similarity index 80% rename from spring-boot/src/test/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializerTests.java rename to spring-boot/src/test/java/org/springframework/boot/context/listener/LoggingApplicationListenerTests.java index 1e38316a940..a8bd4358920 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializerTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/listener/LoggingApplicationListenerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.context.initializer; +package org.springframework.boot.context.listener; import java.io.IOException; import java.util.logging.LogManager; @@ -31,7 +31,6 @@ import org.springframework.boot.OutputCapture; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplicationStartEvent; import org.springframework.boot.TestUtils; -import org.springframework.boot.context.initializer.LoggingApplicationContextInitializer; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.java.JavaLoggingSystem; import org.springframework.context.support.GenericApplicationContext; @@ -43,12 +42,12 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** - * Tests for {@link LoggingApplicationContextInitializer}. + * Tests for {@link LoggingApplicationListener}. * * @author Dave Syer * @author Phillip Webb */ -public class LoggingApplicationContextInitializerTests { +public class LoggingApplicationListenerTests { private static final String[] NO_ARGS = {}; @@ -58,7 +57,7 @@ public class LoggingApplicationContextInitializerTests { @Rule public OutputCapture outputCapture = new OutputCapture(); - private LoggingApplicationContextInitializer initializer = new LoggingApplicationContextInitializer(); + private LoggingApplicationListener initializer = new LoggingApplicationListener(); private Log logger = new SLF4JLogFactory().getInstance(getClass()); @@ -79,12 +78,15 @@ public class LoggingApplicationContextInitializerTests { System.clearProperty("LOG_FILE"); System.clearProperty("LOG_PATH"); System.clearProperty("PID"); + if (this.context != null) { + this.context.close(); + } } @Test public void testDefaultConfigLocation() { - GenericApplicationContext context = new GenericApplicationContext(); - this.initializer.initialize(context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); this.logger.info("Hello world"); String output = this.outputCapture.toString().trim(); assertTrue("Wrong output:\n" + output, output.contains("Hello world")); @@ -95,7 +97,8 @@ public class LoggingApplicationContextInitializerTests { public void testOverrideConfigLocation() { TestUtils.addEnviroment(this.context, "logging.config: classpath:logback-nondefault.xml"); - this.initializer.initialize(this.context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); this.logger.info("Hello world"); String output = this.outputCapture.toString().trim(); assertTrue("Wrong output:\n" + output, output.contains("Hello world")); @@ -106,7 +109,8 @@ public class LoggingApplicationContextInitializerTests { @Test public void testOverrideConfigDoesNotExist() throws Exception { TestUtils.addEnviroment(this.context, "logging.config: doesnotexist.xml"); - this.initializer.initialize(this.context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); // Should not throw } @@ -115,8 +119,9 @@ public class LoggingApplicationContextInitializerTests { TestUtils.addEnviroment(this.context, "logging.config: classpath:logback-nondefault.xml", "logging.file: foo.log"); - this.initializer.initialize(this.context); - Log logger = LogFactory.getLog(LoggingApplicationContextInitializerTests.class); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); + Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class); logger.info("Hello world"); String output = this.outputCapture.toString().trim(); assertTrue("Wrong output:\n" + output, output.startsWith("foo.log")); @@ -126,8 +131,9 @@ public class LoggingApplicationContextInitializerTests { public void testAddLogPathProperty() { TestUtils.addEnviroment(this.context, "logging.config: classpath:logback-nondefault.xml", "logging.path: foo/"); - this.initializer.initialize(this.context); - Log logger = LogFactory.getLog(LoggingApplicationContextInitializerTests.class); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); + Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class); logger.info("Hello world"); String output = this.outputCapture.toString().trim(); assertTrue("Wrong output:\n" + output, output.startsWith("foo/spring.log")); @@ -136,7 +142,8 @@ public class LoggingApplicationContextInitializerTests { @Test public void parseDebugArg() throws Exception { TestUtils.addEnviroment(this.context, "debug"); - this.initializer.initialize(this.context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); this.logger.debug("testatdebug"); this.logger.trace("testattrace"); assertThat(this.outputCapture.toString(), containsString("testatdebug")); @@ -146,7 +153,8 @@ public class LoggingApplicationContextInitializerTests { @Test public void parseTraceArg() throws Exception { TestUtils.addEnviroment(this.context, "trace"); - this.initializer.initialize(this.context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); this.logger.debug("testatdebug"); this.logger.trace("testattrace"); assertThat(this.outputCapture.toString(), containsString("testatdebug")); @@ -157,7 +165,8 @@ public class LoggingApplicationContextInitializerTests { public void parseArgsDisabled() throws Exception { this.initializer.setParseArgs(false); TestUtils.addEnviroment(this.context, "debug"); - this.initializer.initialize(this.context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); this.logger.debug("testatdebug"); assertThat(this.outputCapture.toString(), not(containsString("testatdebug"))); } @@ -168,7 +177,8 @@ public class LoggingApplicationContextInitializerTests { this.initializer.setParseArgs(false); this.initializer.onApplicationEvent(new SpringApplicationStartEvent( this.springApplication, new String[] { "--debug" })); - this.initializer.initialize(this.context); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); this.logger.debug("testatdebug"); assertThat(this.outputCapture.toString(), not(containsString("testatdebug"))); }