【第八篇】 SpringBoot高级配置(配置篇)
简介
本文介绍了SpringBoot中第三方Bean的使用方法、松散绑定的多种命名格式、常用计量单位的使用、Bean属性校验的实现、并指出YAML配置文件对进制数据的特殊处理方式。文中使用文字描述并配以图片,详细演示了SpringBoot的高级配置内容,以供大家参考。文章内容若存在错误或需改进的地方,欢迎大家指正!若对操作有任何疑问欢迎留言!非常感谢!
目录
一、第三方Bean的使用
1、将第三方类注册为SpringBoot项目中的Bean
(1)注册Bean
(2)测试
2、第三方Bean的属性绑定
(1)属性绑定
(2)测试
(3)答疑解惑
二、松散绑定
三、常用计量单位
1、时间属性
2、存储容量
四、Bean的属性校验
1、导入规范坐标
2、开启校验功能
3、具体校验类型
4、导入规范具体实现类
5、测试
6、扩展
五、关于属性绑定的一些问题
1、进制数据转换
一、第三方Bean的使用
1、将第三方类注册为SpringBoot项目中的Bean
这里使用alibaba提供的数据库连接池DruidDataSource类作为示例
首先需要将需要的第三方包的依赖坐标进行导入(这里并不是注册Bean的必要步骤,因演示需要才导入坐标)
(1)注册Bean
创建一个类用于管理所有的第三方Bean,一般会创建一个config包,然后再config包下创建一个以Config结尾的配置类。该类名可以自定义,然后在该配置类上方声明@Configuration注解,声明为一个配置类,然后写一个方法,这个方法必须使用@Bean注解声明,该注解会将这个方法的返回注册为SpringBoot中的Bean,并且Bean的名称为首字母小写的方法名。
(2)测试
可以知道在启动类这里能够得到IOC容器对象,那么只需要在这尝试获取一下DruidDataSource的Bean即可,若能获取并打印成功,代表方式正确。
2、第三方Bean的属性绑定
(1)属性绑定
通过上面的操作已经将DruidDataSource类注册为了SpringBoot中的Bean,DruidDataSource当然也有自己的属性,那么DruidDataSource的属性值也是可以通过读取配置文件的内容来进行赋值的。
下面以driverClass属性为例。
首先在配置文件中配置出driverClass属性值
然后在第三方类注册为Bean的方法上声明@ConfigurationProperties注解,并给prefix属性赋值为datasource,因为DruidDataSource中存在setDriverClassName方法,所以配置文件中的配置项就会通过setDriverClassName方法将配置项的值赋值给DruidDataSource的driverClass属性。
(2)测试
还是在启动类中直接获取容器对象,然后获取Bean并进行打印属性值。
(3)答疑解惑
也许会有为什么要给DruidDataSource的driverClass属性赋值,而配置项却写的是driver-class-name。
首先中划线的问题是因为配置项的松散绑定,在下方的篇章会详细讲解,这里不再赘述。
然后就是除去中划线,名称也和driverClass对不上,这里是因为配置项中的名称需要与实体类的set方法后的名称保持强一致。配置项名称时可以不与实体类中的属性名保持一致,因为一般情况下set/get方法后面的名称是和属性名一致的,比如自动生成或者使用lombok生成的方法,都是一致的,所以也会有配置项名必须属性名保持一致的说法。如果有特殊情况,那么只需要保证配置项中的名称需要与实体类的set方法后的名称强一致即可,与get方法、实体类名、实体属性名、set方法形参无关。详细可查看【第三篇 SpringBoot项目中的属性配置】。
二、松散绑定
@ConfigurationProperties绑定的属性支持属性名松散绑定,@Value不支持。
松散绑定也称宽松绑定,这种绑定机制更加的灵活,允许开发者以多种格式书写配置属性,而 Spring Boot 能够智能地将这些不同格式的属性名匹配到对应的 Bean 属性上。
其实松散绑定也就是在配置文件中,只要名称对的上,那么名称的格式就可非常随意,可以按照不同的分格与实体属性进行绑定。
下面以一个自定的类的ipAddress属性作为示例。
第一种:与属性名完全保持一致
第二种:小写格式
第三种:下划线格式
第N种:中划线、大写、大写中划线、胡乱写格式等等
通过上面的演示可以知道什么是属性的松散绑定,官方推荐的格式为中划线格式,也就是ip-address格式,这种格式又称为“烤肉串格式”。最常用的格式还有驼峰格式(ipAddress)、常量格式(IP_ADDRESS)、下划线格式(ip_address)。
三、常用计量单位
1、时间属性
JDK8提供了一个类为Duration,这个类专门用来描述时间属性的。所以在实体类中创建有关时间的属性时,就可以指定类型为Duration。
当指定属性的类型为Duration后,默认的时间单位就是毫秒,从下面的例子可以看出。
可以在Duration类型的属性上使用@DurationUnit注解声明,然后通过ChronoUnit枚举指定单位。
2、存储容量
DataSize类专门用于表示数据的大小,所以在实体类中创建有关数据大小的属性时就可以指定类型为DataSize。
当指定属性的类型为DataSize后,默认的数据大小单位就是B,从下面的例子可以看出。
可以在DataSize类型的属性上使用@DataSizeUnit注解声明,然后通过DataUnit枚举指定单位。
四、Bean的属性校验
开启数据校验有助于系统安全性,J2EE规范中JSR303规范定义了一组有关数据校验相关的API
1、导入规范坐标
首先,导入JSR303规范坐标
2、开启校验功能
然后,在指定地方开启bean属性校验功能,需要在指定类上声明@Validated注解,表示当前类需要做校验。
3、具体校验类型
JSR303规范提供了多种注解用于校验,例如@Max用于校验最大值,value表示规范的值,message表示不符合这个规范的时候显示的提示信息。
4、导入规范具体实现类
上面的操作只是JSR303规范的接口而具体使用还是需要导入具体实现类,这里使用的是hibernate
5、测试
通过上面的配置就已经开启了Bean的属性校验,下面进行一项测试。
6、扩展
点击@Max注解,然后进入到当前注解所在包javax.validation.constraints里,可以看到提供了很多用于校验的注解。
同样hibernate也提供了非常多用于校验的注解。
五、关于属性绑定的一些问题
1、进制数据转换
application.yaml配置文件是支持配置二进制、八进制、十进制、十六进制的数字配置的,配置文件会优先使用满足进制格式的配置来读取数字。
例如,在配置密码的时候,设置为自己的生日0325,这个时候0325是符合八进制的规则的,那么application.yaml配置文件就会使用八进制读取数字,然后转换成十进制进行传递。
解决办法:要么就直接使用十进制数字,获取对数字使用双引号包裹即可
上一篇——》【第七篇】 SpringBoot项目的热部署https://blog.csdn.net/qq1743177790/article/details/148498772