Commit 9dfbc25e authored by Phillip Webb's avatar Phillip Webb

Polish

parent e130c00e
...@@ -26,13 +26,12 @@ import org.springframework.boot.context.event.ApplicationStartedEvent; ...@@ -26,13 +26,12 @@ import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.SystemPropertyUtils;
/** /**
* An {@link org.springframework.context.ApplicationListener} that saves application PID * 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 * into file. This application listener will be triggered exactly once per JVM, and the
* name can be overridden at runtime with a System property or environment variable named * file name can be overridden at runtime with a System property or environment variable
* "PIDFILE" (or "pidfile"). * named "PIDFILE" (or "pidfile").
* *
* @author Jakub Kubrynski * @author Jakub Kubrynski
* @author Dave Syer * @author Dave Syer
...@@ -46,6 +45,8 @@ public class ApplicationPidListener implements ...@@ -46,6 +45,8 @@ public class ApplicationPidListener implements
private static final String DEFAULT_FILE_NAME = "application.pid"; 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 static final AtomicBoolean created = new AtomicBoolean(false);
private int order = Ordered.HIGHEST_PRECEDENCE + 13; private int order = Ordered.HIGHEST_PRECEDENCE + 13;
...@@ -74,10 +75,30 @@ public class ApplicationPidListener implements ...@@ -74,10 +75,30 @@ public class ApplicationPidListener implements
*/ */
public ApplicationPidListener(File file) { public ApplicationPidListener(File file) {
Assert.notNull(file, "File must not be null"); Assert.notNull(file, "File must not be null");
String actual = SystemPropertyUtils.resolvePlaceholders("${PIDFILE}", true); String override = getOverride();
actual = !actual.contains("$") ? actual : SystemPropertyUtils.resolvePlaceholders("${pidfile}", true); if (override != null) {
actual = !actual.contains("$") ? actual : file.getAbsolutePath(); this.file = new File(override);
this.file = new File(actual); }
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 @Override
......
...@@ -67,7 +67,9 @@ public class ApplicationPidListenerTests { ...@@ -67,7 +67,9 @@ public class ApplicationPidListenerTests {
System.setProperty("PIDFILE", this.temporaryFolder.newFile().getAbsolutePath()); System.setProperty("PIDFILE", this.temporaryFolder.newFile().getAbsolutePath());
ApplicationPidListener listener = new ApplicationPidListener(file); ApplicationPidListener listener = new ApplicationPidListener(file);
listener.onApplicationEvent(EVENT); listener.onApplicationEvent(EVENT);
assertThat(FileCopyUtils.copyToString(new FileReader(System.getProperty("PIDFILE"))), not(isEmptyString())); assertThat(
FileCopyUtils.copyToString(new FileReader(System.getProperty("PIDFILE"))),
not(isEmptyString()));
} }
} }
...@@ -465,11 +465,11 @@ HTTPS connector: ...@@ -465,11 +465,11 @@ HTTPS connector:
[[howto-use-tomcat-behind-a-proxy-server]] [[howto-use-tomcat-behind-a-proxy-server]]
=== Use Tomcat behind a front-end 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 Spring Boot will automatically configure Tomcat's `RemoteIpValve` if you enable it. This
transparently use the standard `x-forwarded-for` and `x-forwarded-proto` headers that allows you to transparently use the standard `x-forwarded-for` and `x-forwarded-proto`
most front-end proxy servers add. The valve is switched on by setting one or both of these headers that most front-end proxy servers add. The valve is switched on by setting one or
properties to something non-empty (these are the conventional values used by most proxies, and if both of these properties to something non-empty (these are the conventional values used by
you only set one the other will be set automatically): most proxies, and if you only set one the other will be set automatically):
[indent=0] [indent=0]
---- ----
...@@ -477,9 +477,8 @@ you only set one the other will be set automatically): ...@@ -477,9 +477,8 @@ you only set one the other will be set automatically):
server.tomcat.protocol_header=x-forwarded-protocol server.tomcat.protocol_header=x-forwarded-protocol
---- ----
If your proxy uses different headers you can If your proxy uses different headers you can customize the valve's configuration by adding
customize the valve's configuration by adding some entries to `application.properties`, some entries to `application.properties`, e.g.
e.g.
[indent=0] [indent=0]
---- ----
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment