在Spring Framework的設定參數可以依照環境區分成多個版本,這篇文章介紹Spring Boot有哪些設定的方式,以及他們之間覆蓋彼此的順序。以下以修改內建伺服器的Port為例示範。
最優先級:程式啟動參數
$ java Application --server.port=80
$ java -jar Application.jar --server.port=80
在啟動Java程式的時候直接指定帶入的參數,這個參數會先傳到Java的程式進入點main(String[] args)
,然後再傳到SpringApplication.run
,如下所示。目前測試起來寫在這裡的設定的優先度最高,會覆蓋之後所有設定。
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
以下寫法也有一樣效果,但這樣寫只是用來讓人更加清楚參數的傳遞,實際上可別這樣寫啊!
public static void main(String[] args) {
SpringApplication.run(Application.class, {"--server.port=80"});
}
第二優先:透過System設定
public static void main(String[] args) {
System.setProperty("server.port", "80")
SpringApplication.run(Application.class, args);
}
透過System.setProperty()
設定,這是第二優先的設定順序,但要在啟動Spring之前先設定好。
第三優先:透過JVM環境變數指定
java -Dserver.port=80 Application
java -Dserver.port=80 -jar Application.jar
在啟動java的時候透過-D
參數指定的數值,在java中可以透過System.getProperty(name)
獲取,其實跟第二優先的方法是一樣的。但是在程式內指定的property會覆蓋-D
設定的參數,因此優先級較低。
第四優先:指定環境的application-xxx.properties
server.port= 80 # properties寫法
server.port: 80 # yml寫法
例如:application-prod.properties
、application-test.properties
等
第五優先:application.properties
server.port= 80 # properties寫法
server.port: 80 # yml寫法
寫在application.properties
或是application.yml
裡面的設定,設定的優先序是最低的,目前測起來其他每個設定方式都會覆蓋此設定。