SpringBoot-03-配置之注入配置檔案
阿新 • • 發佈:2020-09-23
3.2 注入配置檔案
yaml更強大的地方在於,可以給實體類直接注入匹配值!
yaml注入配置檔案
-
在springboot專案中的resources目錄下新建application.yml
-
編寫一個實體類 Dog
@Component public class Dog { private String name; private Integer age; }
-
思考:原來怎麼給bean注入屬性值,@Value
@Component public class Dog { @Value("旺財") private String name; @Value("3") private Integer age; }
-
在SpringBoot的測試類下注入輸出
@SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Dog dog; @Test void contextLoads() { System.out.println(dog); } }
-
再編寫一個複雜一點的實體類:Person類
@Component public class Person { private String name; private Integer age; private boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
-
使用yaml配置的方式進行注入,注意區別和優勢
person: name: huba age: 22 happy: false birth: 2020/8/11 maps: {k1: v1,k2: v2} lists: -code -music dog: name: 旺財 age: 3
-
我們現在來注入到類中
@Component @ConfigurationProperties(prefix = "person") public class Person { ... }
-
IDEA提示,springboot配置註解處理器沒有找到,我們可以檢視文件,找到一個依賴!
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
-
確認以上配置都ok之後,去測試類中測試一下
載入指定的配置檔案
@PropertySource:載入指定的配置檔案
;
@ConfigurationProperties:預設從全域性配置檔案
中獲取值;
-
在resources下新建一個
person.properties
name=huba
-
在實體類上指定載入
person.properties
檔案@PropertySource(value="classpath:person.properties") // EL表示式取值 @Value("${name}")
-
輸出測試:指定配置檔案繫結成功!
配置檔案佔位符
配置檔案還可以編寫佔位符生成隨機數
person:
name: huba${random.uuid}
age: ${random.int}
happy: false
birth: 2020/8/11
maps: {k1: v1,k2: v2}
lists:
-code
-music
dog:
name: ${person.hello:huba}_旺財
age: 3
測試輸出結果:
對比小結
@Configuration
只需要寫一次即可,@Value
則每個欄位都需要;- 鬆散繫結:yml中的last-name,這個和lastName是等價的,-後面的字母預設是大寫的;
- JSR303資料校驗,它就是在欄位增加一層過濾器驗證,可以保證資料的合法性;
- 複雜型別封裝,yml可以封裝物件;
結論:
- 推薦yml
- 如果只需要獲取配置檔案的某個值,可以使用@Value
- 如果專門編寫一個JavaBean來和配置檔案一一對映,就直接@ConfigurationProperties,不要猶豫!