springboot @value啟動報錯_SpringBoot系列:2、配置
1、配置檔案
1.1 配置檔案
SpringBoot使用一個全域性的配置檔案
- application.properties
- application.yml
- 配置檔案的作用:修改SpringBoot自動配置的預設配置
1.2 YAML
- 標記語言
- 以資料為中心,比json、xml等更適合做配置檔案
1.2.1 基本語法
- k:(空格)v:表示一對鍵值對(空格必須有)
- 以空格的縮排來控制層級關係,只要是左對齊的一列資料,都是同一個層級的
- 屬性和值大小寫敏感
server: port: 8081
1.2.2 值的寫法
- 字面量:普通的值(數字、字串、布林)
- 字串不用加上單引號或者雙引號
- “”:雙引號,不迴轉義字串裡面的特殊字元,特殊字元會作為本身想要表示的意思
name: "aa bb" 輸出:aa 換行 bb
- ‘’:單引號,會轉義特殊字元,特殊字元最終只是一個普通的字串資料
name: 'aa bb' 輸出:aa bb
- 物件、Map(屬性和值)(鍵值對)
- k: v 在下一行來寫物件的屬性和值的關係,注意縮排,物件還是k: v的方式
person: firstName: zhang lastName: san age: 24 行內寫法 person: {firstName: zhang, astName: san, age: 24}
- 陣列(List、Set)
- 用-值表示陣列中的一個元素
animals: - cat - dog - pig 行內寫法 animals: [cat, dog, pig]
2、讀取配置檔案
2.1 第一種@ConfigurationProperties 方式
application.yml檔案內容
person: lastName: xiaoH age: 29 boss: false birth: 2019-10-16 maps: {k1: v1, k2: v2} lists: - zhangsan - lisi - wangwu dog: name: 旺財 age: 2
Dog.java
public class Dog { private String name; private Integer age; // 省略getter和setter方法}
Person.java
@[email protected](prefix = "person")public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map maps; private List lists; private Dog dog; // 省略getter和setter方法}
注意:使用@ConfigurationProperties(prefix = "person")註解,會提示
這個不是報錯,只是idea提示,在pom檔案中引入下面這個jar即可。
org.springframework.boot spring-boot-configuration-processor true
單元測試類SpringbootConfigApplicationTests.java
@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringbootConfigApplicationTests { @Autowired Person person; @Test public void contextLoads() { System.out.println(person); }}
執行單元測試類輸出:
2.2 第三種@Value方式
配置檔案不變,Person.java
@Component//@ConfigurationProperties(prefix = "person")public class Person { @Value("${person.lastName}") private String lastName; @Value("#{14*2}") private Integer age; @Value("true") private Boolean boss; private Date birth; private Map maps; private List lists; private Dog dog; // 省略掉getter、setter、toString方法}
執行單元測試類輸出:
注意:使用@Value註解需要保證所包含的鍵名在配置檔案中是一定要存在的,否則會報錯。比如註釋掉配置檔案中的lastName屬性,然後在執行單元測試,報錯如下:
解決方式:
@Value("${person.lastName:null}") private String lastName;
2.3 @ConfigurationProperties與@Value的區別
對比項
@ConfigurationProperties @Value 功能
批量注入配置檔案中的屬性
一個個的繫結 鬆散繫結
支援
不支援
SpEL 不支援 支援
JSR303資料校驗 支援 不支援 複雜型別封裝 支援 不支援 2.4 資料校驗
@[email protected](prefix = "person")@Validatedpublic class Person {// @Value("${person.lastName:null}") @Email private String lastName;// @Value("#{14*2}") private Integer age;// @Value("true") private Boolean boss; private Date birth; private Map maps; private List lists; private Dog dog;}
2.5 @PropertySource
載入指定的配置檔案新建一個person.properties
person.last-name=xiaoH666person.age=29person.boss=falseperson.birth=2019/11/11person.maps.k1=v1person.maps.k2=v2person.lists=a,s,dperson.dog.name=wangcaiperson.dog.age=2
Person.java
@PropertySource(value = "classpath:person.properties")@[email protected](prefix = "person")//@Validatedpublic class Person {// @Value("${person.lastName:null}")// @Email private String lastName;// @Value("#{14*2}") private Integer age;// @Value("true") private Boolean boss; private Date birth; private Map maps; private List lists; private Dog dog; // /省略掉getter、setter、toString方法}
執行單元測試,輸出結果
3、原始碼
GitHub:https://github.com/chenjiecg/SpringBoot.git
本文由部落格一文多發平臺 https://openwrite.cn?from=article_bottom 釋出!