Browse Source

Copy server customization to management context

If the actuator endpoints are configured on a different port then there
are some settings in the main ServerProperties that we would like to
re-use (e.g. the access log). The easiest way to do that is to just
configure the management server using the same ServerProperties instance
and then overwrite the things that are different (and stored in
ManagementServerProperties).

Fixes gh-1581
pull/2035/head
Dave Syer 11 years ago committed by Phillip Webb
parent
commit
336b96b81c
  1. 12
      spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java
  2. 16
      spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfigurationTests.java
  3. 1
      spring-boot-samples/spring-boot-sample-actuator/src/main/resources/application.properties

12
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java

@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.boot.actuate.autoconfigure;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@ -36,6 +37,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -36,6 +37,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
@ -75,13 +77,23 @@ public class EndpointWebMvcChildContextConfiguration { @@ -75,13 +77,23 @@ public class EndpointWebMvcChildContextConfiguration {
// instances get their callback very early in the context lifecycle.
private ManagementServerProperties managementServerProperties;
private ServerProperties server;
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (this.managementServerProperties == null) {
this.managementServerProperties = BeanFactoryUtils
.beanOfTypeIncludingAncestors(this.beanFactory,
ManagementServerProperties.class);
this.server = BeanFactoryUtils
.beanOfTypeIncludingAncestors(this.beanFactory,
ServerProperties.class);
}
// Customize as per the parent context first (so e.g. the access logs go to the same place)
server.customize(container);
// Then reset the error pages
container.setErrorPages(Collections.<ErrorPage>emptySet());
// and add the management-specific bits
container.setPort(this.managementServerProperties.getPort());
container.setAddress(this.managementServerProperties.getAddress());
container.setContextPath(this.managementServerProperties.getContextPath());

16
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfigurationTests.java

@ -35,6 +35,7 @@ import org.springframework.boot.autoconfigure.web.ServerProperties; @@ -35,6 +35,7 @@ import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration;
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent;
import org.springframework.boot.test.EnvironmentTestUtils;
@ -222,6 +223,7 @@ public class EndpointWebMvcAutoConfigurationTests { @@ -222,6 +223,7 @@ public class EndpointWebMvcAutoConfigurationTests {
assertThat(localServerPort, notNullValue());
assertThat(localManagementPort, notNullValue());
assertThat(localServerPort, not(equalTo(localManagementPort)));
assertThat(applicationContext.getBean(ServerPortConfig.class).getCount(), equalTo(2));
this.applicationContext.close();
assertAllClosed();
}
@ -303,10 +305,22 @@ public class EndpointWebMvcAutoConfigurationTests { @@ -303,10 +305,22 @@ public class EndpointWebMvcAutoConfigurationTests {
@Configuration
public static class ServerPortConfig {
private int count = 0;
public int getCount() {
return count;
}
@Bean
public ServerProperties serverProperties() {
ServerProperties properties = new ServerProperties();
ServerProperties properties = new ServerProperties() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
count++;
super.customize(container);
}
};
properties.setPort(ports.get().server);
return properties;
}

1
spring-boot-samples/spring-boot-sample-actuator/src/main/resources/application.properties

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
logging.file: /tmp/logs/app.log
logging.level.org.springframework.security: INFO
management.address: 127.0.0.1
#management.port: 8181
endpoints.shutdown.enabled: true
server.tomcat.basedir: target/tomcat
server.tomcat.access_log_enabled: true

Loading…
Cancel
Save