SpringBoot萬字爆肝高級配置
@ConfigurationProperties注入
創(chuàng)建一個新的模板
此過程就不在這介紹了,在我SpringBoot專欄里有詳細過程。
???注意的是加入所需的支持這什么也不勾選。

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
為當前實體類在編譯期設置對應的get/set,toString方法,hashCode方法,equals方法等。
需要導入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);
}
}
運行結果: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);
}
}
運行結果: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());
}
}
運行結果:com.mysql.jdbc.Driver
@EnableconfigurationProperties
@EnableConfigurationProperties注解可以將使用@ConfigurationProperties注解對應的類加入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不能同時使用
解除使用@ConfigurationProperties注釋警告

加入依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
寬松綁定
- 寬松綁定就是configrationProperties注入的書寫規(guī)范并不嚴格,大小寫,下劃線、中劃線、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引用單個屬性的方式
??測試:
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);
}
}報錯信息:Could not resolve placeholder 'servers.ipAddress' in value "${servers.ipAddress}"
常量計量單位綁定
SpringBoot支持JDK8提供的時間與空間計量單位
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;
}??常用計量單位 ChronoUnit

DataUnit

數(shù)據(jù)校驗
??添加了SR303規(guī)范坐標與Hibernate校驗框架對應坐標
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
??使用hibernate框架提供的校驗器做實現(xiàn)類
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
??對Bean開啟校驗功能
@ConfigurationProperties(prefix = "servers")
@Validated
@Data
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}??設置校驗規(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設置為1234,測試結果如下

進制數(shù)據(jù)轉換規(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);
}
}測試結果是個八進制的83。
???注意:根據(jù)字面值表達方式,String類型的需要使用雙引號包裹。
??重新編寫application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: "0123"
運行結果:

到此這篇關于SpringBoot萬字爆肝高級配置的文章就介紹到這了,更多相關SpringBoot高級配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java創(chuàng)建型設計模式之抽象工廠模式(Abstract?Factory)
當系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個簡單的對象,而是多個位于不同產(chǎn)品等級結構中屬于不同類型的具體產(chǎn)品時需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)2022-09-09
SpringBoot mybatis 實現(xiàn)多級樹形菜單的示例代碼
這篇文章主要介紹了SpringBoot mybatis 實現(xiàn)多級樹形菜單的示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
java的Object里wait()實現(xiàn)原理講解
這篇文章主要介紹了java的Object里wait()實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot?表單提交全局日期格式轉換器實現(xiàn)方式
這篇文章主要介紹了SpringBoot?表單提交全局日期格式轉換器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
Mybatis Select Count(*)的返回值類型介紹
這篇文章主要介紹了Mybatis Select Count(*)的返回值類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

