我有一个名为dbstuff的java项目,它使用db.properties
从getClass().getResourceAsStream("/db.properties")
读取属性。值类似于连接字符串等。这个dbstuff用于各种项目,其中大多数是web。
我现在有一个dropwizard项目(maven),它使用dbstuff.jar
作为依赖项,这个项目编译为胖{,如here所述,目前dbstuff只读取{{{}}的值1}}如果文件存在于db.properties
中,并且在创建包时,/src/main/resources
将嵌入jar中。
我想要实现的是让db.properties
外部,以便我可以拥有各种db.properties
(每个环境一个)但只有一个dropwizard jar,这可能吗?
谢谢
答案 0 :(得分:0)
我认为您可以在DropWizard中创建配置类,然后使用它为每个环境返回正确的配置 - https://dropwizard.readthedocs.org/en/latest/manual/hibernate.html。
至于你的问题,如果你在同一条路径上有多个资源,即使在不同的jar上,也无法保证将使用哪一个Java。将名为db.properties的文件添加到/ src / main / resources时,它将成为资源“db.properties”,并按原样读取:
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)
答案 1 :(得分:0)
您可以通过系统属性在运行时将路径传递给外部db.properties
文件,例如:
java -jar myjar.jar -DdbConfig=/path/to/db.properties
然后在dbstuff.jar
中的代码中,您可以加载属性文件:
final String path = System.getProperty("dbConfig");
final Properties properties = Properties.load(new FileInputStream(path));
或者,正如您所提到的,您正在使用Dropwizard,在您的配置文件(yaml文件或您正在使用的任何文件)中有一个属性,该属性指定外部db.properties
文件的位置,在服务器期间加载属性初始化然后将它们传递给dbstuff.jar
中需要它的任何内容。
然后你可以更进一步,忘记db.properties
文件,并在Dropwizard配置中有一个指定所有属性的整个部分,例如:
db:
url: jdbc://....
user: dbuser
# etc...
然后传递dbstuff.jar
中需要的对象。有关如何执行此操作的详细信息,请参阅Dropwizard的configuration documentation。