// In class HostPrecedingPropertyPlaceholderConfigurer
protected String resolvePlaceholder(String placeholder, Properties props) {
try {
if (placeholder.startsWith("HOST.")) {
String hostname = InetAddress.getLocalHost().getHostName();
String hostSpecific = placeholder.replaceFirst("HOST", hostname);
log.debug("Looking for property " + hostSpecific);
String value = props.getProperty(hostSpecific);
if (value == null) {
log.debug("Falling back to default property " + placeholder);
value = props.getProperty(placeholder);
}
return value;
} else {
return props.getProperty(placeholder);
}
} catch (UnknownHostException e) {
log.warn(e);
return null;
}
}
Now, my
${HOST.jdbc.url}
in the Spring context file will first look for my hostname.jdbc.url
property, but alas, if that returns null, it will default to the value of the HOST.jdbc.url
property, enabling me to have a properties file like this:
prodweb.jdbc.url=jdbc:mysql://proddata/db
testweb.jdbc.url=jdbc:mysql://testdata/db
mstest.jdbc.url=jdbc:sqlserver://mstest\\sql2005;database=db;integratedSecurity=true
HOST.jdbc.url=jdbc:mysql://localhost/db
It might be even nicer if it looked for default.jdbc.url, or fallback.jdbc.url, depending on your taste. :-)