@ -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.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
@@ -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
@@ -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