I have several systems that all need to load the same properties to the JVM. I can use the -D flag to load one property at a time, but i am looking for something that will load
If you use Ant to lanuch the Java process, 9000's answer (plus his windows comment) will work, and you can have the launcher deal with the OS difference.
There is a StackOverflow thread here which describes how to determine the OS from ant
Some options:
getClass().getResourceAsStream()
I solve this problem normally by using Spring (used for other reasons too) and a PropertyPlaceholderConfigurer. That allows me to specify one or more locations for property files and modifies the Spring configuration in-place.
I don't think you can do that via the command line (without some bash hacks, perhaps), but you definitely can do that programatically:
Simply set one property -DmyPropertiesFile=/your/properties/file.properties
and then read that with one of the Properties.load()
overloads. After that, System.setProperties(yourProps)
should do what you expect.
Of course, this requires that you can hook this code early enough so that your properties will be available when needed (For instance, if the main()
method is yours, this is perfect).
That's roughly how we do it:
java $(tr '\n' ' ' < options_file) other args...
Here options_file
contains ready -Dsomething
or -Xsomething
values, one per line. The tr
command just replaces every newline with a space.