javascript
学习Spring Boot:(三)配置文件
前言
Spring Boot使用習慣優(yōu)于配置(項目中存在大量的配置,此外還內置了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速運行起來。
正文
使用配置文件注入屬性
Spring Boot 默認的配置文件src/main/java/resources/application.properties或者src/main/java/resources/application.yml,在這里我們可以配置一些常量。
首先我們使用配置文件給一個類注入相關的屬性:
通過注解@Value(value=”${config.name}”)就可以綁定到你想要的屬性上面。
@RestController @RequestMapping("/pet") public class PetController {@Value("${com.wuwii.controller.pet.no}")private String no;@Value("${com.wuwii.controller.pet.name}")private String name;@RequestMapping("/d")public String detail() {return "no: " + no + ", name: " + name;}}啟動
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LRZWlxto-1637076863922)(https://ws1.sinaimg.cn/large/ece1c17dgy1fno1evzf6sj20fv04n0sp.jpg)]
一個個綁定數(shù)據(jù)還是很不方便,可以新建一個Bean,專門用來綁定注入的屬性使用注解@ConfigurationProperties(prefix = “prefix”),不過需要注意的是先要引入相關依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>通過使用spring-boot-configuration-processor jar, 你可以從被@ConfigurationProperties注解的節(jié)點輕松的產生自己的配置元數(shù)據(jù)文件。
這里我新建一個PetBean用來注入屬性。
@ConfigurationProperties(prefix = "com.wuwii.controller.pet") public class PetBean {private String no;private String name;public String getNo() {return no;}public void setNo(String no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}注意在啟動類上加上注解
@EnableConfigurationProperties({PetBean.class}),1根據(jù)字面意思不難理解,就是開啟配置屬性。
新建一個controller,注入我們創(chuàng)建的PetBean,
@RestController @RequestMapping("/v2/pet") public class PetController1 {@Autowiredprivate PetBean pet;@RequestMapping("/d")public String detail() {return "no: " + pet.getNo() + ", name: " + pet.getName();} }重啟Spring Boot,訪問新地址:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sUJOLuy9-1637076863934)(https://ws1.sinaimg.cn/large/ece1c17dgy1fno25n0o60j20hi043weg.jpg)]
使用自定義的配置文件
我們在resouce目錄下面創(chuàng)建一個bean/pet.properties,加入
com.wuwii.name=Tom com.wuwii.no=12345612新建一個PetBean1.java:
@PropertySource 這個注解可以指定具體的屬性配置文件,優(yōu)先級比較低。
在controller中加入PetBean1的注入
@Autowiredprivate PetBean1 pet1;@RequestMapping("/d2")public String detail2() {return "no: " + pet1.getNo() + ", name: " + pet1.getName();}應用配置文件(.properties或.yml)
在配置文件中直接寫:
server.port=80801.yml格式的配置文件如:
server:port: 808012tips: .yml中冒號后面一定要加一個空格。
隨機數(shù)
配置文件中${random} 可以用來生成各種不同類型的隨機值,
my.secret=${random.value} my.number=${random.int} my.bignumber=${random.long} my.number.less.than.ten=${random.int(10)} my.number.in.range=${random.int[1024,65536]}屬性占位符
app.name=MyApp app.description=${app.name} is a Spring Boot application12可以在配置文件中引用前面配置過的屬性(優(yōu)先級前面配置過的這里都能用)。
通過如${app.name:默認名稱}方法還可以設置默認值,當找不到引用的屬性時,會使用默認的屬性。
屬性名匹配規(guī)則
例如有如下配置對象:
@Component @ConfigurationProperties(prefix="person") public class ConnectionSettings {private String firstName;}firstName可以使用的屬性名如下:
* person.firstName,標準的駝峰式命名
* person.first-name,虛線(-)分割方式,推薦在.properties和.yml配置文件中使用
* PERSON_FIRST_NAME,大寫下劃線形式,建議在系統(tǒng)環(huán)境變量中使用
屬性驗證
可以使用JSR-303注解進行驗證,例如:
@Component @ConfigurationProperties(prefix="connection") public class ConnectionSettings {@NotNullprivate InetAddress remoteAddress;// ... getters and setters}配置文件的優(yōu)先級
Spring Boot 支持多種外部配置方式,這些方式優(yōu)先級如下:
同樣,這個列表按照優(yōu)先級排序,也就是說,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性,此外,如果你在相同優(yōu)先級位置同時有application.properties和application.yml,那么application.properties里的屬性里面的屬性就會覆蓋application.yml。
Profile-多環(huán)境配置
當應用程序需要部署到不同運行環(huán)境時,一些配置細節(jié)通常會有所不同,最簡單的比如日志,生產日志會將日志級別設置為WARN或更高級別,并將日志寫入日志文件,而開發(fā)的時候需要日志級別為DEBUG,日志輸出到控制臺即可。
如果按照以前的做法,就是每次發(fā)布的時候替換掉配置文件,這樣太麻煩了,Spring Boot的Profile就給我們提供了解決方案,命令帶上參數(shù)就搞定。
這里我們來模擬一下,只是簡單的修改端口來測試
在Spring Boot中多環(huán)境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環(huán)境標識,比如:
- application-dev.properties:開發(fā)環(huán)境
- application-prod.properties:生產環(huán)境
然后在application.properties中加入
spring.profiles.active=dev或application.yml中加入
spring:# 環(huán)境 dev|test|proprofiles:active: dev或啟動命令:
java -jar xxx.jar --spring.profiles.active=dev參數(shù)用–xxx=xxx的形式傳遞。意思就是表示在application.properties文件中配置了屬性。
可以通過SpringApplication.setAddCommandLineProperties(false)禁用命令行配置。
附:Appendix A. Common application properties
Appendix A. Common application properties
總結
以上是生活随笔為你收集整理的学习Spring Boot:(三)配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lisp精要(2)-基础(1)
- 下一篇: 汇编解析(6)-二进制文件(嵌入式,纯二