springBoot基礎系列——properties配置
原創作品,可以轉載,但是請標註出處地址:http://www.cnblogs.com/V1haoge/p/7183408.html
SpringBoot中免除了大部分手動配置,但是對於一些特定的情況,還是需要我們進行手動配置的,SpringBoot為我們提供了application.properties配置文件,讓我們可以進行自定義配置,來對默認的配置進行修改,以適應具體的生產情況,當然還包括一些第三方的配置。幾乎所有配置都可以寫到application.peroperties文件中,這個文件會被SpringBoot自動載入,免去了我們手動載入的煩惱。但實際上,很多時候我們卻會自定義配置文件,這些文件就需要我們進行手動載入,SpringBoot是不會自動識別這些文件的,下面就來仔細看看這些方面的內容。
1、配置文件的格式
SpringBoot可以識別兩種格式的配置文件,分別是yml文件與properties文件,我們可以將application.properties文件換成application.yml,這兩個文件都可以被SpringBoot自動識別並載入,但是如果是自定義的配置文件,就最好還是使用properties格式的文件,因為SpringBoot中暫時還並未提供手動載入yml格式文件的功能(這裡指註解方式)。
application.properties配置文件欲被SpringBoot自動載入,需要放置到指定的位置:src/main/resource目錄下,一般自定義的配置文件也位於此目錄之下。
2、配置文件的載入
載入的意思就是將文件讀取到Spring容器之中,更確切的說就是將各個配置項裝載到Spring上下文容器之中供隨時取用。
application.properties配置文件是在SpringBoot項目啟動的時候被自動載入的,其內部的相關設置會自動覆蓋SpringBoot默認的對應設置項,所以的配置項均會保存到Spring容器之中。
1-公共配置文件:application.properties
1 donghao.name=唯一浩哥
2 donghao.sex=男
3 donghao.age=80
自定義的xxx.properties配置文件是不會被SpringBoot自動載入的,需要手動去進行載入,這裡的手動載入一般指的是註解的方式載入,這裡就涉及到我們今天的重點之一:載入自定義屬性文件的註解:@PropertySource("classpath:xxx.properties"),這個註解專門用來載入指定位置的properties文件,Spring暫未提供載入指定位置yml文件的註解,所以才有之前的說法。
2-自定義配置文件:donghao.properties
1 donghao1.name=動畫
2 donghao1.sex=女
3 donghao1.age=22
其實無論對於哪裡的properties文件,當我們需要使用其中配置內容的時候,就在當前類的頂部加註該註解,將該配置文件載入到內存,這些配置文件一次載入即可多次使用。
3、配置項的使用
配置項的使用其實很簡單,只要是載入到Spring容器中的配置項都可以直接使用@Value("${key}")的方式來引用,一般將其配置在欄位頂部,表示將配置項的值賦值給該欄位。
當然更多的情況是將這些配置項與一個JavaBean綁定起來使用,這樣綁定一次,我們就可以隨時使用。這裡涉及到兩種情況,一種是將application.properties中的配置與JavaBean綁定,一種是將自定義配置文件中的配置與Javabean綁定。
第一種:applicaiton.properties屬性綁定JavaBean
這種情況相對簡單(因為application.properties文件會被自動載入,也就是說配置項會被自動載入到內存,到Spring容器之中,省去了手動載入的配置),然後我們在要與屬性綁定的JavaBean的類定義頂部加@Component註解和@ConfigurationProperties(prefix="key")註解,前者的目的是為了這個JavaBean可以被SpringBoot項目啟動時候被掃描到並載入到Spring容器之中,重點是後者,這個註解一般不是單獨使用的,他一般與後面要說的@EnableConfigurationProperties(JavaBean.class)配合使用,但是二者並非使用在同一位置,@ConfigurationProperties(prefix="key")註解加註在JavaBean類定義之上,按字面可以理解為屬性配置註解,更直接點的說法就是屬性綁定註解,官方解釋是:如果想要綁定或者驗證一些來源自.properties文件中的額外屬性時,你可以在一個標註的@Configuration的類的注有@Bean註解的方法或者一個類之上加註這個註解。我們完全可以將其理解為綁定專用註解。它的作用就是將指定的前綴的配置項的值與JavaBean的欄位綁定,這裡要注意,為了綁定的成功,一般將欄位的名稱與配置項鍵的最後一個鍵名相同,這樣整個鍵在去掉前綴的情況下就和欄位名稱一致,以此來進行綁定。
第二種:自定義配置的屬性綁定JavaBean
這種情況與之前的基本相同,只是不能自動載入,需要手動載入,在JavaBean之上加上之前介紹的@PropertySource註解進行配置文件載入。還有一點就是將@Component改為@Configuration,為什麼這麼做呢?
@Configuration註解的底層就是@Component,但是二者意義不同,@Configuration註解側重配置之意,@Component側重組件之意,當然配置也是項目組件之一,在這裡我們要將配置文件屬性與JavaBean綁定,當然更側重配置之意。
將配置與JavaBean綁定之後,我們就可以通過JavaBean來獲取配置的內容,而且JavaBean已經被@Component註解或者@Configuration註解載入到Spring容器,我們可以使用自動注入的方式在其他類中隨便使用。
這裡要注意一點:當我們在某個類中要使用這個JavaBean時,需要在這個類中指定這個JavaBean的類型,這個指定也要使用註解來制定,正是之前介紹的@EnableConfigurationProperties註解,這個註解與@ConfigurationProperties註解配套使用。官方給出的解釋:這個註解是對@ConfigurationProperties的有效支持。標註有@ConfigurationProperties註解的Beans可以被使用標準的方式註冊(使用@Bean註解),或者,為了方便起見,直接用使用@EnableConfigurationProperties指定註冊。意思是這個註解提供了一種方便直接的註冊Bean的方式。
3-綁定JavaBean:Donghao.java
1 package com.donghao.model;
2
3 import org.springframework.boot.context.properties.ConfigurationProperties;
4 import org.springframework.context.annotation.Configuration;
5 import org.springframework.context.annotation.PropertySource;
6
7 @Configuration
8 @PropertySource("classpath:donghao.properties")
9 @ConfigurationProperties(prefix="donghao1")
10 public class Donghao {
11 private String name;
12 private String sex;
13 private String age;
14 public String getName {
15 return name;
16 }
17 public void setName(String name) {
18 this.name = name;
19 }
20 public String getSex {
21 return sex;
22 }
23 public void setSex(String sex) {
24 this.sex = sex;
25 }
26 public String getAge {
27 return age;
28 }
29 public void setAge(String age) {
30 this.age = age;
31 }
32 }
4-定義控制器:DonghaoController
1 package com.donghao.controller;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.beans.factory.annotation.Value;
5 import org.springframework.boot.context.properties.EnableConfigurationProperties;
6 import org.springframework.web.bind.annotation.RequestMapping;
7 import org.springframework.web.bind.annotation.RestController;
8
9 import com.donghao.model.Donghao;
10
11 @RestController
12 @RequestMapping("/donghao")
13 @EnableConfigurationProperties(Donghao.class)
14 public class DonghaoController {
15
16 @Autowired
17 Donghao donghao;
18
19 @Value("${donghao.name}")
20 private String name;
21
22 @Value("${donghao.sex}")
23 private String sex;
24
25 @Value("${donghao.age}")
26 private String age;
27
28
29 @RequestMapping("/hello")
30 public String hello{
31 return "我的名字叫"+name+",我是"+sex+"生,今年"+age+"歲了!";
32 }
33
34 @RequestMapping("/ss")
35 public String ss{
36 return donghao.getName+donghao.getSex+donghao.getAge;
37 }
38 }
5-定義啟動入口類:DonghaoApplication.java
1 package com.donghao;
2
3 import org.springframework.boot.SpringApplication;
4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5
6 @SpringBootApplication
7 public class DonghaoApplication {
8
9 public static void main(String[] args) {
10
11 SpringApplication.run(DonghaoApplication.class, args);
12
13 }
14
15 }
啟動程序之後,瀏覽器訪問:http://localhost:8080/donghao/hello,結果為:
瀏覽器訪問:http://localhost:8080/donghao/ss
我這裡要重點強調一點,載入和使用並不相關聯,雖然載入的目的是為了使用,但是載入和使用之間並不是強關聯的,我們完全可以載入但不實用,所以我們應該將載入的過程與使用的過程分開來分析,他們對應於不同的註解,這些註解之間並不是強關聯的,他們各有各的用途,各有作用,如果只是載入自定義配置文件,只要一個@PropertySource註解就完事,使用方面的註解不用去管,當需要使用的使用,我們完全可以選擇多種使用的方式,直接使用的話我們就使用@Value註解進行直接賦值,這個註解就可以直接將被載入到Spring容器中的屬性配置的值賦值到指定的欄位,當然也可以使用綁定JavaBean的方式。
還有一點要注意,千萬不要在公共配置文件application.properties和自定義配置文件xxx.properties中配置相同的的配置項的不同值,因為公共配置文件的優先權最高,會覆蓋掉自定義配置文件中的內容,你可以這麼理解,公共配置文件中的某個配置被在啟動時載入到Spring容器中,之後又在另外一個自定義配置文件中載入了同名的配置項,二者有不同的值,但是系統會檢查二者的優先權,誰高誰留,誰低誰走,最後自定義配置文件中的值無效。
※HDU 1325,POJ 1308 Is It A Tree
※nodejs 構建本地web測試伺服器 以及 解決訪問靜態資源的問題!有完整源碼!
TAG:科技優家 |
※springboot配置druid連接池
※springboot:使用Spring Boot Actuator監控應用
※SpringBoot | 第三章:springboot 配置詳解
※深入 SpringBoot : 怎樣排查 expectedsinglematchingbeanbutfound 2 的異常
※SpringBoot:SpringDataRedis緩存改造
※Springboot2.X之切換使用Servlet容器Jetty、Tomcat、Undertow
※SpringBoot 系列一 : SpringBoot 入門
※帶著新人學springboot的應用04(springboot+mybatis+redis 完)
※在springboot中配置aop攔截器
※SpringBoot伺服器壓測對比(jetty、tomcat、undertow)
※Mysql8.0主從搭建,shardingsphere+springboot+mybatis讀寫分離
※SpringBoot使用Nacos配置中心
※緩存架構SpringBoot集成Curator實現zookeeper分散式鎖
※springboot websocket後台主動推送消息
※SpringBoot 2的普通servlet與WebFlux性能對比
※Springboot2.0 Theamleaf Security整合快速入門
※SpringBoot中如何進行Bean配置
※springboot+vue簡單的後台管理
※springboot+atomikos 分散式事務處理示例
※SpringBoot配置基礎攔截器