配置文件功能強(qiáng)大,不僅可以設(shè)置各種依賴的屬性,還可以給bean綁定屬性,bean就是IOC容器管理的所有的類。
1.快速實(shí)現(xiàn)綁定 1.1 給自定bean綁定yml配置如下
servers:
IpAddress: 192.168.0.1
port: 8083
timeout: -1
實(shí)體類如下,@Component將該實(shí)體類作為IOC容器管理的bean,@Data是lombok快速給一個(gè)實(shí)體類實(shí)現(xiàn)getter,setter和構(gòu)造方法。@ConfigurationProperties可以給bean指定配置文件中的“對(duì)象名”。
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String IpAddress;
private String port;
private String timeout;
}
小提示:使用 @ConfigurationProperties 時(shí)出現(xiàn)如下提示,只需要在pom.xml文件中引入以下坐標(biāo):
org.springframework.boot spring-boot-configuration-processor
1.2 給第三方bean綁定第三方bean的類函數(shù)是在包里的,無(wú)法直接在上面用注釋導(dǎo)入。具體方法是構(gòu)造一個(gè)返回值為該類的方法,如下:
datasource:
driverClassName: com.mysql.jdbc.driver
@Bean
// 注意datasource必須全小寫(xiě)
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();
return ds;
}
1.3 使用@EnableConfigurationProperties統(tǒng)一管理綁定屬性的類上述的方法已經(jīng)能夠?qū)崿F(xiàn)給自定義的bean和第三方bean綁定屬性,但是有一個(gè)問(wèn)題是,當(dāng)這些bean太多的時(shí)候,怎么知道哪些bean通過(guò)**@ConfigurationProperties綁定了屬性?這時(shí)候就需要使用@EnableConfigurationProperties**統(tǒng)一聲明和管理這些bean
@SpringBootApplication
// 這些類用逗號(hào)隔開(kāi),將@ConfigurationProperties注釋的類注入到IOC容器中
@EnableConfigurationProperties(ServerConfig.class)
public class Springboot13ConfigurationApplication {}
這里注意@EnableConfigurationProperties注釋會(huì)自動(dòng)將找到的類注入到IOC容器中,也就是該類自動(dòng)成為了IOC容器管理的Bean,所以就不要再用@Component聲明了,如下即可:
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String IpAddress;
private String port;
private String timeout;
}
2.松散綁定松散綁定就是yaml配置文件中的命名和Bean的屬性和 @ConfigurationProperties 中引用的“對(duì)象名”都不需要非常精確。以下形式都可以綁定到:
servers:
ipAddress: 192.168.0.2 # 駝峰模式
ip_address: 192.168.0.2 # 下劃線模式
ip-address: 192.168.0.2 # 烤肉串模式
IP_ADDRESS: 192.168.0.2 # 常量模式
springboot官方推薦的是烤肉串模式,即使用-分隔,使用小寫(xiě)字母數(shù)字作為標(biāo)準(zhǔn)字符,且必須以字母開(kāi)頭。
有一點(diǎn)要注意的是 @ConfigurationProperties 中引用的“對(duì)象名”必須是烤肉串模式。
給出幾個(gè)案例:
dataSource:
driverClassName: com.mysql.jdbc.driver
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();
return ds;
}
控制臺(tái)打印的該bean,成功綁定:
dataSource:
driverClassName: com.mysql.jdbc.driver
@Bean
@ConfigurationProperties(prefix = "data-source")
public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();
return ds;
}
控制臺(tái)打印的該bean,成功綁定:
datasource:
driverClassName: com.mysql.jdbc.driver
@Bean
@ConfigurationProperties(prefix = "data-source")
public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();
return ds;
}
控制臺(tái)打印的該bean,成功綁定:
datasource:
driverClassName: com.mysql.jdbc.driver
@Bean
@ConfigurationProperties(prefix = "dataSource")
public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();
return ds;
}
控制臺(tái)打印的該bean,成功失敗,提示要使用烤肉串模式:
總結(jié):
松散綁定就是yaml配置文件中的名字可以有多種方式,bean的屬性也可以有多種方式,springboot都能給我們綁定上,這就是 @ConfigurationProperties 注解的強(qiáng)大和方便之處。但是springboot官方推薦給我們的是在配置文件和注解中最好使用烤肉串模式,其中注解中必須使用烤肉串模式,實(shí)際上,全小寫(xiě)只是烤肉串模式的一個(gè)特例。
springboot利用JDK8提供的兩個(gè)類,Duration和DataSize解決的綁定的單位問(wèn)題
servers:
ip-address: 192.168.0.1
port: 8083
timeout: 4
data-size: 20
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String IpaAddress;
private String port;
// 小時(shí)
@DurationUnit(ChronoUnit.HOURS)
private Duration timeout;
// MB
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
}
控制臺(tái)打印結(jié)果如下:
Springboot給出了強(qiáng)大的數(shù)據(jù)校驗(yàn)功能,JAVAEE的JSR303規(guī)范中給出了具體的數(shù)據(jù)校驗(yàn)標(biāo)準(zhǔn),但這是一些接口,開(kāi)發(fā)者需要根據(jù)自己的需要選擇對(duì)應(yīng)的校驗(yàn)框架,這里以Hibernate提供的框架為例。
1. 開(kāi)啟校驗(yàn)框架
javax.validation validation-api org.hibernate.validator hibernate-validator
2. 在需要開(kāi)啟校驗(yàn)功能的類上使用注解@Validated開(kāi)啟校驗(yàn)功能
@Component
@Data
@ConfigurationProperties(prefix = "servers")
//開(kāi)啟對(duì)當(dāng)前bean的屬性注入校驗(yàn)
@Validated
public class ServerConfig {}
3. 對(duì)具體的字段設(shè)置校驗(yàn)規(guī)則
@Component
@Data
@ConfigurationProperties(prefix = "servers")
//開(kāi)啟對(duì)當(dāng)前bean的屬性注入校驗(yàn)
@Validated
public class ServerConfig {//設(shè)置具體的規(guī)則
@Max(value = 8080,message = "大值不能超過(guò)8080")
private int port;
}
當(dāng)端口號(hào)設(shè)置為8083時(shí),會(huì)報(bào)錯(cuò)
進(jìn)入包中可以看到更多的方法,這里不再贅述,根據(jù)需要查閱即可
雖然字符串直接寫(xiě)數(shù)字一般會(huì)自動(dòng)轉(zhuǎn)化,但是萬(wàn)一是 0245 這種符合八進(jìn)制寫(xiě)法的數(shù)字,則會(huì)自動(dòng)轉(zhuǎn)成十進(jìn)制后再轉(zhuǎn)成字符串,就會(huì)造成錯(cuò)誤。所以如果是字符串最好直接加引號(hào)吧。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:用yml配置文件給bean綁定屬性-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://chinadenli.net/article26/ddisjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、用戶體驗(yàn)、電子商務(wù)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容