SpringBoot配置屬性的規則
- 通過.分離各個元素
- 最后一個.將前綴與屬性名稱分開
- 必須是字母(az)和數字(0-9)
- 必須是小寫字母
- 用連字符-來分隔單詞
- 唯一允許的其他字符是[和],用於List的索引
- 不能以數字開頭
相同的配置項
Spring Boot 2.x 加載配置文件的時候會移除特殊字符並且還會將配置均用全小寫的方式進行匹配和加載。
application.properties
com.rumenz.id-name=rumenz
com.rumenz.id_name=rumenz
com.rumenz.idName=rumenz
com.rumenz.idname=rumenz
測試
package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @className: RumenzController
* @description: TODO 類描述
* @author: 入門小站 rumenz.com
* @date: 2021/11/8
**/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {
@Value("${com.rumenz.idname}")
private String comRumenzIdName;
@RequestMapping("/index")
@ResponseBody
public String index(){
return comRumenzIdName;
}
}
瀏覽器訪問
http://127.0.0.1:8080/rumenz/index
,返回rumenz
以上4個配置項是等價的,推薦全小寫中間用
-
分割。
配置文件的優先級
application.properties和application.yml文件可以在放在以下幾個位置。
- 外部:應用程序運行目錄的
config
子目錄 - 外部:應用程序運行目錄的跟目錄
- 內部:在config包里面
classpath:/config/
- 內部:在classpath根目錄
classpath:/
路徑 | 參數值 |
---|---|
/springboot-zhinan/lession8/config/application.properties | com.rumenz.level=1 |
/springboot-zhinan/lession8/application.properties | com.rumenz.level=2 |
/springboot-zhinan/lession8/src/main/resources/config/application.properties | com.rumenz.level=3 |
/springboot-zhinan/lession8/src/main/resources/application.properties | com.rumenz.level=4 |
application.properties
中配置了com.rumenz.level
com.rumenz.level=1
測試
package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @className: RumenzController
* @description: TODO 類描述
* @author: 入門小站 rumenz.com
* @date: 2021/11/8
**/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {
@Value("${com.rumenz.idname}")
private String comRumenzIdName;
@Value("${com.rumenz.level}")
private String comRumenzLevel;
@RequestMapping("/index")
@ResponseBody
public String index(){
return comRumenzIdName;
}
@RequestMapping("/index1")
@ResponseBody
public String index1(){
return comRumenzLevel;
}
}
使用
mvn clean package
打包后,使用jar -jar lession8-0.0.1-SNAPSHOT.jar
運行。如果上述4個地方都定義了application.properties
,並且都配置了com.rumenz.level
,當我們的業務里面需要用com.rumenz.level
配置項。查找的優先級是:
- 1.先找運行目錄下的config的
application.properties
中的com.rumenz.level
,找到返回,否則下一步 - 2.再找運行目錄下的
application.properties
中的com.rumenz.level
,找到返回否則下一步 - 3.再找classpath下的config目錄的
application.properties
的com.rumenz.level
,找到返回否則下一步 - 4.再找classpath下的
application.properties
的com.rumenz.level
,找到就返回,找不到就報錯,項目啟動失敗。
命令行參數配置
springboot的
application.properties
中可以配置一些參數,如端口號,賬號,密碼。如果我們想在運行的時候想臨時修改運行的端口也是可以的。
java -jar lession8-0.0.1-SNAPSHOT.jar --server.port=9000
這樣項目運行的端口就變成了
9000
,--server.port=9000
相當於在application.properties
中配置server.port=9000
系統環境變量
我們也可以在操作系統里面定義變量,然后通過
@Value
注入到Spring容器中。
package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @className: RumenzController
* @description: TODO 類描述
* @author: 入門小站 rumenz.com
* @date: 2021/11/8
**/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {
//讀取系統環境變量
@Value("${PATH}")
private String path;
@RequestMapping("/index2")
@ResponseBody
public String index2(){
return path;
}
}
瀏覽器訪問
http://127.0.0.1:8080/rumenz/index2
,返回/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/share/dotnet:~/.dotnet/tools:/usr/local/mysql/bin:/usr/local/mysql/bin
系統屬性
我們可以設置
VM arguments
向Spring容器傳遞參數值。
Idea中設置VM arguments
測試
package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @className: RumenzController
* @description: TODO 類描述
* @author: 入門小站 rumenz.com
* @date: 2021/11/8
**/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {
@Value("${spring.test.env}")
private String springTestEnv;
@RequestMapping("/index3")
@ResponseBody
public String index3(){
return springTestEnv;
}
}
瀏覽器訪問
http://127.0.0.1:8080/rumenz/index3
,返回test
jar包運行設置VM arguments
java -jar -Dspring.test.env=testvm lession8-0.0.1-SNAPSHOT.jar
瀏覽器訪問
http://127.0.0.1:8080/rumenz/index3
,返回testvm
本小結源碼地址:
-
GitHub:https://github.com/mifunc/springboot/tree/main/lession8
-
Gitee:https://gitee.com/rumenz/springboot/tree/master/lession8
-
我的博客 https://rumenz.com/ ,
-
我的工具箱 https://tooltt.com/
-
微信公眾號:【入門小站】
- 關注【入門小站】回復【1001】獲取 linux常用命令速查手冊
- 關注【入門小站】回復【1003】獲取 LeetCode題解【java語言實現】
- 關注【入門小站】回復【1004】獲取 Java基礎核心總結
- 關注【入門小站】回復【1009】獲取 阿里巴巴Java開發手冊