因此,我的团队继承了一个非常大的Java存储库。它在打包的jar文件中有一个配置文件。
在代码中的多个位置,它按如下所示加载配置文件:
InputStream in = classLoader.getResourceAsStream("configfile.config");
现在,根据环境,我希望能够加载其他配置文件。 在dev上,我希望能够加载configfile.dev.config;在prod上,我希望能够加载configfile.prod.config。
该问题最无创,清洁的解决方案是什么?
答案 0 :(得分:0)
这是Spring Boot应用程序吗?如果是,则可以使用不同的配置文件,例如dev,根据配置文件测试和加载资源。-https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
如果不是Spring Boot应用程序,则可以将配置文件值作为JVM参数传递,并在代码中使用它来加载相应的资源。
value=System.getProperty("profile");
以-
运行应用程序时传递配置文件值 -Dprofile=test
您可以使用传递的配置文件并相应地加载相应的文件。
InputStream in =
classLoader.getResourceAsStream(value);
答案 1 :(得分:0)
由于您似乎没有对此的框架支持,而是从命令行启动,因此最好的方法是使用系统属性。有两种常用方法:
使用诸如config.location
之类的属性,其中值是配置文件的URI。这种方法更加灵活,可以在运行时提供一个新的配置文件,但是在jar中引用一个配置文件会更加复杂(这些URI会变长并且需要外壳转义)。
使用诸如config.profile
之类的属性,其中该值是诸如dev
或prod
之类的配置文件标识符。为包含的配置文件命名/dev/config.file
或/config-dev.file
,然后从属性中组合适当的模板名称。
根据您的喜好在jar中包含多种配置,第二个选项可能更合适。