diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java index b36c6f4880..bd62091b10 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java @@ -60,7 +60,7 @@ public class RedisMetricRepository implements MetricRepository, InitializingBean this.redisOperations = RedisUtils.stringTemplate(redisConnectionFactory); this.zSetOperations = this.redisOperations.boundZSetOps(this.key); } - + @Override public void afterPropertiesSet() { if (!DEFAULT_METRICS_PREFIX.equals(this.prefix)) { @@ -72,7 +72,7 @@ public class RedisMetricRepository implements MetricRepository, InitializingBean this.zSetOperations = this.redisOperations.boundZSetOps(this.key); } } - + /** * The prefix for all metrics keys. * @param prefix the prefix to set for all metrics keys diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/ApplicationPidListener.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/ApplicationPidListener.java index 75a42e39e8..496c34622c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/ApplicationPidListener.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/ApplicationPidListener.java @@ -26,13 +26,12 @@ import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.Ordered; import org.springframework.util.Assert; -import org.springframework.util.SystemPropertyUtils; /** * An {@link org.springframework.context.ApplicationListener} that saves application PID - * into file. This application listener will be triggered exactly once per JVM, and the file - * name can be overridden at runtime with a System property or environment variable named - * "PIDFILE" (or "pidfile"). + * into file. This application listener will be triggered exactly once per JVM, and the + * file name can be overridden at runtime with a System property or environment variable + * named "PIDFILE" (or "pidfile"). * * @author Jakub Kubrynski * @author Dave Syer @@ -46,6 +45,8 @@ public class ApplicationPidListener implements private static final String DEFAULT_FILE_NAME = "application.pid"; + private static final String[] PROPERTY_VARIABLES = { "PIDFILE", "pidfile" }; + private static final AtomicBoolean created = new AtomicBoolean(false); private int order = Ordered.HIGHEST_PRECEDENCE + 13; @@ -74,10 +75,30 @@ public class ApplicationPidListener implements */ public ApplicationPidListener(File file) { Assert.notNull(file, "File must not be null"); - String actual = SystemPropertyUtils.resolvePlaceholders("${PIDFILE}", true); - actual = !actual.contains("$") ? actual : SystemPropertyUtils.resolvePlaceholders("${pidfile}", true); - actual = !actual.contains("$") ? actual : file.getAbsolutePath(); - this.file = new File(actual); + String override = getOverride(); + if (override != null) { + this.file = new File(override); + } + else { + this.file = file; + } + } + + private String getOverride() { + for (String property : PROPERTY_VARIABLES) { + try { + String override = System.getProperty(property); + override = (override != null ? override : System.getenv(property)); + if (override != null) { + return override; + } + } + catch (Throwable ex) { + System.err.println("Could not resolve '" + property + + "' as system property: " + ex); + } + } + return null; } @Override diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/ApplicationPidListenerTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/ApplicationPidListenerTests.java index eb410db9d2..06c3791677 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/ApplicationPidListenerTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/ApplicationPidListenerTests.java @@ -67,7 +67,9 @@ public class ApplicationPidListenerTests { System.setProperty("PIDFILE", this.temporaryFolder.newFile().getAbsolutePath()); ApplicationPidListener listener = new ApplicationPidListener(file); listener.onApplicationEvent(EVENT); - assertThat(FileCopyUtils.copyToString(new FileReader(System.getProperty("PIDFILE"))), not(isEmptyString())); + assertThat( + FileCopyUtils.copyToString(new FileReader(System.getProperty("PIDFILE"))), + not(isEmptyString())); } } diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc index 412e26b2f3..9c410f5575 100644 --- a/spring-boot-docs/src/main/asciidoc/howto.adoc +++ b/spring-boot-docs/src/main/asciidoc/howto.adoc @@ -465,11 +465,11 @@ HTTPS connector: [[howto-use-tomcat-behind-a-proxy-server]] === Use Tomcat behind a front-end proxy server -Spring Boot will automatically configure Tomcat's `RemoteIpValve` if you enable it. This allows you to -transparently use the standard `x-forwarded-for` and `x-forwarded-proto` headers that -most front-end proxy servers add. The valve is switched on by setting one or both of these -properties to something non-empty (these are the conventional values used by most proxies, and if -you only set one the other will be set automatically): +Spring Boot will automatically configure Tomcat's `RemoteIpValve` if you enable it. This +allows you to transparently use the standard `x-forwarded-for` and `x-forwarded-proto` +headers that most front-end proxy servers add. The valve is switched on by setting one or +both of these properties to something non-empty (these are the conventional values used by +most proxies, and if you only set one the other will be set automatically): [indent=0] ---- @@ -477,9 +477,8 @@ you only set one the other will be set automatically): server.tomcat.protocol_header=x-forwarded-protocol ---- -If your proxy uses different headers you can -customize the valve's configuration by adding some entries to `application.properties`, -e.g. +If your proxy uses different headers you can customize the valve's configuration by adding +some entries to `application.properties`, e.g. [indent=0] ----