如何根据环境在Java中加载资源文件?

时间:2019-01-08 17:35:03

标签: java resources

因此,我的团队继承了一个非常大的Java存储库。它在打包的jar文件中有一个配置文件。

在代码中的多个位置,它按如下所示加载配置文件:

 InputStream in = classLoader.getResourceAsStream("configfile.config");

现在,根据环境,我希望能够加载其他配置文件。 在dev上,我希望能够加载configfile.dev.config;在prod上,我希望能够加载configfile.prod.config。

该问题最无创,清洁的解决方案是什么?

2 个答案:

答案 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之类的属性,其中该值是诸如devprod之类的配置文件标识符。为包含的配置文件命名/dev/config.file/config-dev.file,然后从属性中组合适当的模板名称。

根据您的喜好在jar中包含多种配置,第二个选项可能更合适。