Spring Boot加載配置文件


問題1:Spring如何加載配置,配置文件位置?

1、默認位置:

    Spring Boot默認的配置文件名稱為application.properties,SpringApplication將從以下位置加載application.properties文件,並把它們添加到Spring Environment中:

  • 當前目錄下的/config子目錄,
  • 當前目錄。
  • 一個classpath下的/config包
  • classpath根路徑(root)

這個列表是按優先級排序的(列表中位置高的將覆蓋位置低的)。並且,如果存在多個重名的application.properties。

注:Spring-boot配置文件的加載,先在與jar同級下查找,如果沒有就去同級的config下查找;如果再沒有,就在jar包中去查找相應的配置文件,如果再沒有,就去jar包中的config下去查找。當查找到對應配置片段時,采用增量替換的方式來進行替換

2、自定義位置:

    如果不喜歡application.properties這個文件名或者需要自定義配置文件位置,在啟動Spring應用的時候,可以傳入一個spring.config.location參數指定配置文件位置,

例如:

java -jar xxxxx.jar   --spring.config.location=classpath:/default.properties,classpath:/override.properties

上述例子加載了兩個配置文件,分別位於根目錄下的:default.properties,override.properties。

 

問題2:配置文件如何加載到類文件中?

配置文件application.properties中配置屬性:

test.name = wahaha
test.age = 27
test.tel = 18800118888

1、@Component和@Value("${"xxx"}")

類文件:

@Component public class Configurations { @Value("${test.name}") private String name; @Value("${test.age}") private String age; @Value("${test.tel}") private Long tel; // getter and setter }

在類域屬性上通過@Value("${xxx}")指定關聯屬性,Spring Application會自動加載。

啟動類:

@RestController @SpringBootApplication public class ApplicationStarter { @Autowired private Configuration configuration; @RequestMapping("/") public Map<String, Object> sayHello() { Map<String, Object> result = new HashMap<String, Object>(); result.put("name", configuration.getName()); result.put("age", configuration.getAge()); result.put("tel", configuration.getTel()); return result; } public static void main(String[] args) throws Exception { SpringApplication.run(ApplicationStarter.class, args); } }

運行,調用localhost:8080/會看到返回結果是:

{"name":"wahaha","tel":18800118888,"age":"27"}

2、@ConfigurationProperties(prefix = "test")

上述方法,手動書寫@Value還是比較繁重的工作,好在Spring Boot提供了更簡潔的方式。@ConfigurationProperties(prefix = "test")。prefix指定了配置文件的前綴為test,並且按照屬性名進行自動匹配,例如:test.name屬性值會自動加載到private String name域中。

@Component @ConfigurationProperties(prefix = "test") public class Configuration { private String name; private String age; private Long tel; // setter getter }

PS:locations還能夠指定自定義的配置文件位置,這里就不多說了。

@ConfigurationProperties(prefix = "test", locations = "classpath:xxxx.properties")

 

問題3:如何根據線上環境和線下環境加載不同的配置?如何加載多個配置文件?

1、Profiles:

Spring Profiles提供了一種隔離應用程序配置的方式,並讓這些配置只能在特定的環境下生效。在配置文件中,用spring.profiles.active屬性來指定特定環境的配置文件。在Spring Boot中多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如:

  • application-dev.properties:開發環境
  • application-test.properties:測試環境
  • application-prod.properties:生產環境
     

    至於哪個具體的配置文件會被加載,需要在application.properties文件中通過spring.profiles.active屬性來設置,其值對應{profile}值。例如:

application.properties配置:spring.profiles.active = dev即指定application-dev.properties會被加載。


2、通過啟動參數指定運行環境。

通過命令行啟動:

  java -jar xxxxx.jar   --spring.profiles.active=prod。

    上述指定為prod環境,則spring application會自動根據application-{profile}.properties的格式找到application-prod.properties文件加載。

3、加載多個自定義文件。

例如:

 spring.profiles.active = dev,database

等於告訴Spring Boot加載application-dev.properties和application-database.properties文件,從而實現多個配置文件的加載。

參見:https://my.oschina.net/wangyuefive/blog/704615#h3_4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM