Browse Source

Polish

pull/22777/head
Phillip Webb 6 years ago
parent
commit
dfd233cada
  1. 60
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplicationRunListeners.java
  2. 20
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/LoggingSystem.java
  3. 2
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java

60
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplicationRunListeners.java

@ -19,6 +19,7 @@ package org.springframework.boot;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -49,59 +50,36 @@ class SpringApplicationRunListeners {
} }
void starting() { void starting() {
StartupStep starting = this.applicationStartup.start("spring.boot.application.starting"); doWithListeners("spring.boot.application.starting", SpringApplicationRunListener::starting);
for (SpringApplicationRunListener listener : this.listeners) {
listener.starting();
}
starting.end();
} }
void environmentPrepared(ConfigurableEnvironment environment) { void environmentPrepared(ConfigurableEnvironment environment) {
StartupStep environmentPrepared = this.applicationStartup.start("spring.boot.application.environment-prepared"); doWithListeners("spring.boot.application.environment-prepared",
for (SpringApplicationRunListener listener : this.listeners) { (listener) -> listener.environmentPrepared(environment));
listener.environmentPrepared(environment);
}
environmentPrepared.end();
} }
void contextPrepared(ConfigurableApplicationContext context) { void contextPrepared(ConfigurableApplicationContext context) {
StartupStep contextPrepared = this.applicationStartup.start("spring.boot.application.context-prepared"); doWithListeners("spring.boot.application.context-prepared", (listener) -> listener.contextPrepared(context));
for (SpringApplicationRunListener listener : this.listeners) {
listener.contextPrepared(context);
}
contextPrepared.end();
} }
void contextLoaded(ConfigurableApplicationContext context) { void contextLoaded(ConfigurableApplicationContext context) {
StartupStep contextLoaded = this.applicationStartup.start("spring.boot.application.context-loaded"); doWithListeners("spring.boot.application.context-loaded", (listener) -> listener.contextLoaded(context));
for (SpringApplicationRunListener listener : this.listeners) {
listener.contextLoaded(context);
}
contextLoaded.end();
} }
void started(ConfigurableApplicationContext context) { void started(ConfigurableApplicationContext context) {
StartupStep started = this.applicationStartup.start("spring.boot.application.started"); doWithListeners("spring.boot.application.started", (listener) -> listener.started(context));
for (SpringApplicationRunListener listener : this.listeners) {
listener.started(context);
}
started.end();
} }
void running(ConfigurableApplicationContext context) { void running(ConfigurableApplicationContext context) {
StartupStep running = this.applicationStartup.start("spring.boot.application.running"); doWithListeners("spring.boot.application.running", (listener) -> listener.running(context));
for (SpringApplicationRunListener listener : this.listeners) {
listener.running(context);
}
running.end();
} }
void failed(ConfigurableApplicationContext context, Throwable exception) { void failed(ConfigurableApplicationContext context, Throwable exception) {
StartupStep failed = this.applicationStartup.start("spring.boot.application.failed"); doWithListeners("spring.boot.application.failed",
for (SpringApplicationRunListener listener : this.listeners) { (listener) -> callFailedListener(listener, context, exception), (step) -> {
callFailedListener(listener, context, exception); step.tag("exception", exception.getClass().toString());
} step.tag("message", exception.getMessage());
failed.tag("exception", exception.getClass().toString()).tag("message", exception.getMessage()).end(); });
} }
private void callFailedListener(SpringApplicationRunListener listener, ConfigurableApplicationContext context, private void callFailedListener(SpringApplicationRunListener listener, ConfigurableApplicationContext context,
@ -124,4 +102,16 @@ class SpringApplicationRunListeners {
} }
} }
private void doWithListeners(String stepName, Consumer<SpringApplicationRunListener> listenerAction) {
doWithListeners(stepName, listenerAction, StartupStep::end);
}
private void doWithListeners(String stepName, Consumer<SpringApplicationRunListener> listenerAction,
Consumer<StartupStep> stepAction) {
StartupStep step = this.applicationStartup.start(stepName);
this.listeners.forEach(listenerAction);
stepAction.accept(step);
step.end();
}
} }

20
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/LoggingSystem.java

@ -58,24 +58,20 @@ public abstract class LoggingSystem {
*/ */
public static final String ROOT_LOGGER_NAME = "ROOT"; public static final String ROOT_LOGGER_NAME = "ROOT";
private static final Function<ClassLoader, LoggingSystem> SYSTEM_FACTORY; private static final Function<ClassLoader, LoggingSystem> SYSTEM_FACTORY = getSystemFactory();
static { private static Function<ClassLoader, LoggingSystem> getSystemFactory() {
ClassLoader classLoader = LoggingSystem.class.getClassLoader(); ClassLoader classLoader = LoggingSystem.class.getClassLoader();
if (ClassUtils.isPresent("ch.qos.logback.core.Appender", classLoader)) { if (ClassUtils.isPresent("ch.qos.logback.core.Appender", classLoader)) {
SYSTEM_FACTORY = (cl) -> new LogbackLoggingSystem(cl); return LogbackLoggingSystem::new;
} }
else if (ClassUtils.isPresent("org.apache.logging.log4j.core.impl.Log4jContextFactory", classLoader)) { if (ClassUtils.isPresent("org.apache.logging.log4j.core.impl.Log4jContextFactory", classLoader)) {
SYSTEM_FACTORY = (cl) -> new Log4J2LoggingSystem(cl); return Log4J2LoggingSystem::new;
} }
else if (ClassUtils.isPresent("java.util.logging.LogManager", classLoader)) { if (ClassUtils.isPresent("java.util.logging.LogManager", classLoader)) {
SYSTEM_FACTORY = (cl) -> new JavaLoggingSystem(cl); return JavaLoggingSystem::new;
}
else {
SYSTEM_FACTORY = (cl) -> {
throw new IllegalStateException("No suitable logging system located");
};
} }
throw new IllegalStateException("No suitable logging system located");
} }
/** /**

2
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java

@ -1160,12 +1160,10 @@ class SpringApplicationTests {
given(applicationStartup.start(anyString())).willReturn(startupStep); given(applicationStartup.start(anyString())).willReturn(startupStep);
given(startupStep.tag(anyString(), anyString())).willReturn(startupStep); given(startupStep.tag(anyString(), anyString())).willReturn(startupStep);
given(startupStep.tag(anyString(), ArgumentMatchers.<Supplier<String>>any())).willReturn(startupStep); given(startupStep.tag(anyString(), ArgumentMatchers.<Supplier<String>>any())).willReturn(startupStep);
SpringApplication application = new SpringApplication(ExampleConfig.class); SpringApplication application = new SpringApplication(ExampleConfig.class);
application.setWebApplicationType(WebApplicationType.NONE); application.setWebApplicationType(WebApplicationType.NONE);
application.setApplicationStartup(applicationStartup); application.setApplicationStartup(applicationStartup);
this.context = application.run(); this.context = application.run();
assertThat(this.context.getBean(ApplicationStartup.class)).isEqualTo(applicationStartup); assertThat(this.context.getBean(ApplicationStartup.class)).isEqualTo(applicationStartup);
verify(applicationStartup).start("spring.boot.application.starting"); verify(applicationStartup).start("spring.boot.application.starting");
verify(applicationStartup).start("spring.boot.application.environment-prepared"); verify(applicationStartup).start("spring.boot.application.environment-prepared");

Loading…
Cancel
Save