Prevent logging system from being pinged on context refresh
A context refresh is actually only trying to recalculate environment properties. Spring Boot doesn't provide an explicit API for that so we create a "mini application" to mimic the startup. There is no need for the logging system to be touched at all, so we can try and filter out the listeners we know might do that. Fixes gh-260
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
package org.springframework.cloud.context.refresh;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@@ -11,7 +9,9 @@ import java.util.Map;
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.logging.LoggingSystem;
|
||||
import org.springframework.boot.test.util.EnvironmentTestUtils;
|
||||
import org.springframework.cloud.bootstrap.config.PropertySourceLocator;
|
||||
import org.springframework.cloud.context.scope.refresh.RefreshScope;
|
||||
@@ -22,6 +22,8 @@ import org.springframework.core.env.MapPropertySource;
|
||||
import org.springframework.core.env.MutablePropertySources;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class ContextRefresherTests {
|
||||
|
||||
private RefreshScope scope = Mockito.mock(RefreshScope.class);
|
||||
@@ -32,6 +34,8 @@ public class ContextRefresherTests {
|
||||
if (context != null) {
|
||||
context.close();
|
||||
}
|
||||
System.clearProperty(LoggingSystem.SYSTEM_PROPERTY);
|
||||
TestLoggingSystem.count = 0;
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -82,11 +86,33 @@ public class ContextRefresherTests {
|
||||
EnvironmentTestUtils.addEnvironment(context,
|
||||
"spring.cloud.bootstrap.sources: org.springframework.cloud.context.refresh.ContextRefresherTests.PropertySourceConfiguration\n"
|
||||
+ "");
|
||||
ConfigurableApplicationContext refresherContext = refresher.addConfigFilesToEnvironment();
|
||||
assertThat(refresherContext.getParent()).isNotNull().isInstanceOf(ConfigurableApplicationContext.class);
|
||||
ConfigurableApplicationContext parent = (ConfigurableApplicationContext) refresherContext.getParent();
|
||||
ConfigurableApplicationContext refresherContext = refresher
|
||||
.addConfigFilesToEnvironment();
|
||||
assertThat(refresherContext.getParent()).isNotNull()
|
||||
.isInstanceOf(ConfigurableApplicationContext.class);
|
||||
ConfigurableApplicationContext parent = (ConfigurableApplicationContext) refresherContext
|
||||
.getParent();
|
||||
assertThat(parent.isActive()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loggingSystemNotInitialized() {
|
||||
System.setProperty(LoggingSystem.SYSTEM_PROPERTY,
|
||||
TestLoggingSystem.class.getName());
|
||||
TestLoggingSystem system = (TestLoggingSystem) LoggingSystem
|
||||
.get(getClass().getClassLoader());
|
||||
assertThat(system.getCount()).isEqualTo(0);
|
||||
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
|
||||
"--spring.main.webEnvironment=false", "--debug=false",
|
||||
"--spring.main.bannerMode=OFF",
|
||||
"--spring.cloud.bootstrap.name=refresh")) {
|
||||
assertThat(system.getCount()).isEqualTo(4);
|
||||
ContextRefresher refresher = new ContextRefresher(context, scope);
|
||||
refresher.refresh();
|
||||
assertThat(system.getCount()).isEqualTo(4);
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> names(MutablePropertySources propertySources) {
|
||||
List<String> list = new ArrayList<>();
|
||||
for (PropertySource<?> p : propertySources) {
|
||||
@@ -109,4 +135,26 @@ public class ContextRefresherTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
protected static class Empty {
|
||||
}
|
||||
|
||||
public static class TestLoggingSystem extends LoggingSystem {
|
||||
|
||||
private static int count;
|
||||
|
||||
public TestLoggingSystem(ClassLoader loader) {
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeInitialize() {
|
||||
count++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user