1. 程式人生 > 其它 >springboot @value啟動報錯_SpringBoot系列:2、配置

springboot @value啟動報錯_SpringBoot系列:2、配置

技術標籤:springboot @value啟動報錯

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")註解,會提示

4dafbaab40549f5c298df5491cf41405.png

這個不是報錯,只是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); }}

執行單元測試類輸出:

beb7f7a4ede6f4b868776eefd617e7da.png

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方法}

執行單元測試類輸出:

eb3bf3545107e6b2b1644e5fd77a8ad5.png

注意:使用@Value註解需要保證所包含的鍵名在配置檔案中是一定要存在的,否則會報錯。比如註釋掉配置檔案中的lastName屬性,然後在執行單元測試,報錯如下:

f046c5b61e99388c81c56c0ffdd129cb.png

解決方式:

@Value("${person.lastName:null}") private String lastName;
1f829deb9122c762ed92ab7da4c2fdae.png

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方法}

執行單元測試,輸出結果

d96e34e425ff7488ebdc2297e3d8fe00.png

3、原始碼

GitHub:https://github.com/chenjiecg/SpringBoot.git

本文由部落格一文多發平臺 https://openwrite.cn?from=article_bottom 釋出!