SpringBoot高级配置实例分析
导读:本文共5431字符,通常情况下阅读需要18分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:本文小编为大家详细介绍“SpringBoot高级配置实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot高级配置实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。@ConfigurationProperties注入创建一个新的模板注意的是加入所需的支持这什么也不勾选。ServerConfig.javapackagecom.jkj.config... ...
目录
(为您整理了一些要点),点击可以直达。本文小编为大家详细介绍“SpringBoot高级配置实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot高级配置实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
@ConfigurationProperties注入
创建一个新的模板
注意的是加入所需的支持这什么也不勾选。
ServerConfig.java
packagecom.jkj.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@ConfigurationProperties(prefix="servers")@Component@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;}
注意:
@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
@SpringBootApplicationpublicclassConfigurationApplication{ publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); }}
运行结果:ServerConfig(ipAddress=168.225.0.15, port=123456, timeout=-1)
给第三方Bean绑定属性
方式一
编写ConfigurationApplication.java
@SpringBootApplicationpublicclassConfigurationApplication{@Bean publicDruidDataSourcedataSource(){ DruidDataSourceds=newDruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); returnds; } publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSourceds=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
@SpringBootApplicationpublicclassConfigurationApplication{@Bean@ConfigurationProperties(prefix="datasource") publicDruidDataSourcedataSource(){ DruidDataSourceds=newDruidDataSource(); returnds; } publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSourceds=cac.getBean(DruidDataSource.class); System.out.println(ds.getDriverClassName()); }}
运行结果:com.mysql.jdbc.Driver
@EnableconfigurationProperties
@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
ConfigurationApplication.java
@SpringBootApplication@EnableConfigurationProperties(ServerConfig.class)publicclassConfigurationApplication{@Bean@ConfigurationProperties(prefix="datasource") publicDruidDataSourcedataSource(){ DruidDataSourceds=newDruidDataSource(); returnds; } publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSourceds=cac.getBean(DruidDataSource.class); System.out.println(ds.getDriverClassName()); }}
ServerConfig.java
packagecom.jkj.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix="servers")@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;}
注意:@EnableConfigurationProperties
与@Component
不能同时使用
解除使用@ConfigurationProperties注释警告
加入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
宽松绑定
宽松绑定就是configrationProperties注入的书写规范并不严格,大小写,下划线、中划线、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引用单个属性的方式
测试:
packagecom.jkj;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTestclassSpringboot06ConfigurationApplicationTests{@Value("${servers.ipAddress}") privateStringmsg; @Test voidcontextLoads(){ System.out.println(msg); }}
报错信息:Could not resolve placeholder 'servers.ipAddress' in value "${servers.ipAddress}"
常量计量单位绑定
SpringBoot支持JDK8提供的时间与空间计量单位
packagecom.jkj.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.boot.convert.DataSizeUnit;importorg.springframework.boot.convert.DurationUnit;importorg.springframework.util.unit.DataSize;importorg.springframework.util.unit.DataUnit;importjava.time.Duration;importjava.time.temporal.ChronoUnit;@ConfigurationProperties(prefix="servers")@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;@DurationUnit(ChronoUnit.DAYS)privateDurationserverTimeOut;@DataSizeUnit(DataUnit.TERABYTES)privateDataSizedataSize;}
常用计量单位 ChronoUnit
DataUnit
数据校验
添加了SR303规范坐标与Hibernate校验框架对应坐标
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
使用hibernate框架提供的校验器做实现类
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
对Bean开启校验功能
@ConfigurationProperties(prefix="servers")@Validated@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;}
设置校验规则
@ConfigurationProperties(prefix="servers")@Validated@DatapublicclassServerConfig{privateStringipAddress;@Max(value=9999,message="最大值不能超过9999")@Min(value=1111,message="最小值不能超过1111")privateintport;privatelongtimeout;}
yml文件中port设置为1234,测试结果如下
进制数据转换规则
案例模拟
编写application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: 0123
编写ConfigureApplication,java
packagecom.jkj;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTestclassSpringboot06ConfigurationApplicationTests{@Value("${dataSource.Password}") privatePasswordpsw; @Test voidcontextLoads(){ System.out.println(psw); }}
测试结果是个八进制的83。
注意:根据字面值表达方式,String类型的需要使用双引号包裹。
重新编写application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: "0123"
运行结果:
读到这里,这篇“SpringBoot高级配置实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
SpringBoot高级配置实例分析的详细内容,希望对您有所帮助,信息来源于网络。