簡體   English   中英

如何根據環境在Java中加載資源文件?

[英]How to load resource files in java based on the environment?

因此,我的團隊繼承了一個非常大的Java存儲庫。 它在打包的jar文件中有一個配置文件。

在代碼的多個位置,它加載配置文件,如下所示:

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

現在,基於環境,我希望能夠加載其他配置文件。 在dev上,我希望能夠加載configfile.dev.config;在prod上,我希望能夠加載configfile.prod.config。

解決這個問題的最無創,最干凈的方法是什么?

它是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);

由於您似乎對此沒有框架支持,而是從命令行啟動,因此最好的方法是使用系統屬性。 有兩種常見方法:

  • 使用諸如config.location的屬性,其中值是配置文件的URI。 這更加靈活,允許您在運行時提供一個新的配置文件,但是在jar中引用一個配置文件會更加復雜(這些URI會變長,並且需要轉義shell)。

  • 使用諸如config.profile的屬性,其中值是諸如devprod類的配置文件標識符。 將您包含的配置文件命名為/dev/config.file/config-dev.file ,然后從屬性中組合適當的模板名稱。

根據您偏好在jar中包含多種配置,第二種選擇可能更合適。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM