在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.propertiesapplication-test.properties

第五優先:application.properties

server.port= 80  # properties寫法
server.port: 80  # yml寫法

寫在application.properties或是application.yml裡面的設定,設定的優先序是最低的,目前測起來其他每個設定方式都會覆蓋此設定。