Add loader.system (flag to copy properties to System)

This commit is contained in:
Dave Syer 2013-09-24 09:23:44 +01:00
parent a3af83cf96
commit 0e0eb7d3fa
3 changed files with 26 additions and 1 deletions

View File

@ -96,6 +96,13 @@ public class PropertiesLauncher implements ArchiveFilter {
*/
public static final String CONFIG_LOCATION = "loader.config.location";
/**
* Properties key for boolean flag (default false) which if set will cause the
* external configuration properties to be copied to System properties (assuming that
* is allowed by Java security).
*/
public static final String SET_SYSTEM_PROPERTIES = "loader.system";
private static final List<String> DEFAULT_PATHS = Arrays.asList("lib/");
private List<String> paths = new ArrayList<String>(DEFAULT_PATHS);
@ -213,10 +220,19 @@ public class PropertiesLauncher implements ArchiveFilter {
this.properties.put(key, value);
}
}
if (SystemPropertyUtils.resolvePlaceholders(
"${" + SET_SYSTEM_PROPERTIES + ":false}").equals("true")) {
this.logger.info("Adding resolved properties to System properties");
for (Object key : Collections.list(this.properties.propertyNames())) {
String value = this.properties.getProperty((String) key);
System.setProperty((String) key, value);
}
}
}
else {
this.logger.info("Not found: " + config);
}
}
private InputStream getResource(String config) throws Exception {

View File

@ -161,7 +161,7 @@ public abstract class SystemPropertyUtils {
System.err.println("Could not resolve placeholder '" + placeholderName
+ "' in [" + text + "] as system property: " + ex);
}
return properties.getProperty(placeholderName);
return properties == null ? null : properties.getProperty(placeholderName);
}
private static int findPlaceholderEndIndex(CharSequence buf, int startIndex) {

View File

@ -33,6 +33,7 @@ public class PropertiesLauncherTests {
@After
public void close() {
System.clearProperty("loader.system");
System.clearProperty("loader.home");
System.clearProperty("loader.path");
System.clearProperty("loader.main");
@ -50,6 +51,7 @@ public class PropertiesLauncherTests {
public void testUserSpecifiedMain() throws Exception {
this.launcher.initialize(new File("."));
assertEquals("demo.Application", this.launcher.getMainClass(null));
assertEquals(null, System.getProperty("loader.main"));
}
@Test
@ -68,4 +70,11 @@ public class PropertiesLauncherTests {
assertEquals("foo.Bar", this.launcher.getMainClass(null));
}
@Test
public void testSystemPropertiesSet() throws Exception {
System.setProperty("loader.system", "true");
this.launcher.initialize(new File("."));
assertEquals("demo.Application", System.getProperty("loader.main"));
}
}