SpringBoot萬(wàn)字爆肝高級(jí)配置
@ConfigurationProperties注入
創(chuàng)建一個(gè)新的模板
此過程就不在這介紹了,在我SpringBoot專欄里有詳細(xì)過程。
???注意的是加入所需的支持這什么也不勾選。
ServerConfig.java
package com.jkj.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @ConfigurationProperties(prefix = "servers") @Component @Data public class ServerConfig { private String ipAddress; private int port; private long timeout; }
???注意:
@Data
為當(dāng)前實(shí)體類在編譯期設(shè)置對(duì)應(yīng)的get/set,toString方法,hashCode方法,equals方法等。
需要導(dǎo)入lomok的依賴:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
編寫application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
編寫ConfigurationApplication.java
@SpringBootApplication public class ConfigurationApplication { public static void main(String[] args) { ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args); ServerConfig bean = cac.getBean(ServerConfig.class); System.out.println(bean); } }
運(yùn)行結(jié)果:ServerConfig(ipAddress=168.225.0.15, port=123456, timeout=-1)
給第三方Bean綁定屬性
方式一
??編寫ConfigurationApplication.java
@SpringBootApplication public class ConfigurationApplication { @Bean public DruidDataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); return ds; } public static void main(String[] args) { ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args); ServerConfig bean = cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSource ds = cac.getBean(DruidDataSource.class); System.out.println(ds); } }
運(yùn)行結(jié)果:com.mysql.jdbc.Driver
方式二
使用@ConfigurationProperties為第三方bean綁定屬性
??編寫application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
??編寫ConfigurationApplication.java
@SpringBootApplication public class ConfigurationApplication { @Bean @ConfigurationProperties(prefix = "datasource") public DruidDataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); return ds; } public static void main(String[] args) { ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args); ServerConfig bean = cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSource ds = cac.getBean(DruidDataSource.class); System.out.println(ds.getDriverClassName()); } }
運(yùn)行結(jié)果:com.mysql.jdbc.Driver
@EnableconfigurationProperties
@EnableConfigurationProperties注解可以將使用@ConfigurationProperties注解對(duì)應(yīng)的類加入Spring容器
??ConfigurationApplication.java
@SpringBootApplication @EnableConfigurationProperties(ServerConfig.class) public class ConfigurationApplication { @Bean @ConfigurationProperties(prefix = "datasource") public DruidDataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); return ds; } public static void main(String[] args) { ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args); ServerConfig bean = cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSource ds = cac.getBean(DruidDataSource.class); System.out.println(ds.getDriverClassName()); } }
??ServerConfig.java
package com.jkj.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "servers") @Data public class ServerConfig { private String ipAddress; private int port; private long timeout; }
???注意:@EnableConfigurationProperties
與@Component
不能同時(shí)使用
解除使用@ConfigurationProperties注釋警告
加入依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
寬松綁定
- 寬松綁定就是configrationProperties注入的書寫規(guī)范并不嚴(yán)格,大小寫,下劃線、中劃線、springboot都可以忽略。
- @ConfigurationProperties綁定屬性支持屬性名寬松綁定。
以ipAddress為例:
??駝峰模式
ipAddress: 168.225.0.15
??下劃線模式
ip_address: 168.225.0.15
??中劃線模式
IP_ADD_R-E-SS: 168.225.0.15
??常量模式
IP_ADDRESS: 168.225.0.15
??大寫模式
IPADDRESS: 168.225.0.15
??烤肉串模式(推薦使用)
ip-address: 168.225.0.15
寬松綁定不支持注解@Value引用單個(gè)屬性的方式
??測(cè)試:
package com.jkj; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot06ConfigurationApplicationTests { @Value("${servers.ipAddress}") private String msg; @Test void contextLoads() { System.out.println(msg); } }
報(bào)錯(cuò)信息:Could not resolve placeholder 'servers.ipAddress' in value "${servers.ipAddress}"
常量計(jì)量單位綁定
SpringBoot支持JDK8提供的時(shí)間與空間計(jì)量單位
package com.jkj.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.convert.DataSizeUnit; import org.springframework.boot.convert.DurationUnit; import org.springframework.util.unit.DataSize; import org.springframework.util.unit.DataUnit; import java.time.Duration; import java.time.temporal.ChronoUnit; @ConfigurationProperties(prefix = "servers") @Data public class ServerConfig { private String ipAddress; private int port; private long timeout; @DurationUnit(ChronoUnit.DAYS) private Duration serverTimeOut; @DataSizeUnit(DataUnit.TERABYTES) private DataSize dataSize; }
??常用計(jì)量單位 ChronoUnit
DataUnit
數(shù)據(jù)校驗(yàn)
??添加了SR303規(guī)范坐標(biāo)與Hibernate校驗(yàn)框架對(duì)應(yīng)坐標(biāo)
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
??使用hibernate框架提供的校驗(yàn)器做實(shí)現(xiàn)類
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
??對(duì)Bean開啟校驗(yàn)功能
@ConfigurationProperties(prefix = "servers") @Validated @Data public class ServerConfig { private String ipAddress; private int port; private long timeout; }
??設(shè)置校驗(yàn)規(guī)則
@ConfigurationProperties(prefix = "servers") @Validated @Data public class ServerConfig { private String ipAddress; @Max(value = 9999,message = "最大值不能超過9999") @Min(value = 1111,message = "最小值不能超過1111") private int port; private long timeout; }
??yml文件中port設(shè)置為1234,測(cè)試結(jié)果如下
進(jìn)制數(shù)據(jù)轉(zhuǎn)換規(guī)則
案例模擬
??編寫application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: 0123
??編寫ConfigureApplication,java
package com.jkj; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot06ConfigurationApplicationTests { @Value("${dataSource.Password}") private Password psw; @Test void contextLoads() { System.out.println(psw); } }
測(cè)試結(jié)果是個(gè)八進(jìn)制的83。
???注意:根據(jù)字面值表達(dá)方式,String類型的需要使用雙引號(hào)包裹。
??重新編寫application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: "0123"
運(yùn)行結(jié)果:
到此這篇關(guān)于SpringBoot萬(wàn)字爆肝高級(jí)配置的文章就介紹到這了,更多相關(guān)SpringBoot高級(jí)配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)的百度語(yǔ)音識(shí)別功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的百度語(yǔ)音識(shí)別功能,較為簡(jiǎn)明扼要的分析了Java調(diào)用百度語(yǔ)音接口相關(guān)操作步驟,并給出了具體的語(yǔ)音識(shí)別用法代碼示例,需要的朋友可以參考下2018-08-08MyBatis是如何實(shí)現(xiàn)日志模塊的詳解
這篇文章主要給大家介紹了關(guān)于MyBatis是如何實(shí)現(xiàn)日志模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10解決Java導(dǎo)入excel大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出的問題
今天小編就為大家分享一篇解決Java導(dǎo)入excel大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10AJAX中Get請(qǐng)求報(bào)錯(cuò)404的原因以及解決辦法
剛學(xué)習(xí)一門技術(shù)時(shí)總會(huì)踩一些坑,下面這篇文章主要給大家介紹了關(guān)于AJAX中Get請(qǐng)求報(bào)錯(cuò)404的原因及解決辦法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03