SpringBoot 配置高级 ConfigurationProperties注解 宽松绑定/松散绑定 常用计量单位绑定 数据校验
程序员文章站
2024-01-08 08:34:16
...
ConfigurationProperties
- 使用@ConfigurationProperties给第三方Bean配置属性
se:
ipAddress: 192.168.0.1
port: 8080
timeout: -1
将这个Bean加载到Spring容器中,然后使用@ConfigurationProperties给第三方Bean注入属性值。
@Component
@Data
@ConfigurationProperties(prefix = "se")
public class ServiceConfig {
private String ipAddress;
private String port;
private long timeout;
}
ConfigurableApplicationContext context = SpringApplication.run(Springboot12NewconfigurationApplication.class, args);
ServiceConfig bean = context.getBean(ServiceConfig.class);
System.out.println(bean);
- 也可以给已有的Bean绑定属性值。
datasource:
driverClassName: 123
@Bean 这个注解就是将return对象存放到Spring容器中。
@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
DruidDataSource ds = new DruidDataSource();
return ds;
}
DruidDataSource ds = context.getBean(DruidDataSource.class);
System.out.println(ds.getDriverClassName());
补充:@EnableConfigurationProperties(ServiceConfig.class)
这个注解就是说明一个哪一个bean要配置属性值,并且在使用这个注解的时候,是不可以使用@Compent这个属性的,因为@EnableConfigurationProperties这个注解已经包含了将bean对象扔到Spring容器中了。
宽松绑定/松散绑定
一句话,就是配置文件中的值,可以忽略大小写等内容,但是prefix的值必须是小写的。
常用计量单位绑定
关于时间大小和空间大小的单位绑定。
se:
ipAddress: 192.168.0.1
port: 8080
timeout: -1
serverTimeOut: 3
dataSize: 2
@DurationUnit(ChronoUnit.DAYS)
private Duration serverTimeOut ;
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
数据校验
如何给Bean做他对应的属性校验
就是给Bean注入属性的时候,就会遇到手滑现象,就是定义的是int类型,但是手滑写的是Sting类型,或者说是int类型的数据范围是1111-8888,但是手滑写成了9999,所以这时候就需要进行数据校验。
需要导入两个坐标 第一个坐标是一个接口,第二个坐标是一个实现类
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
使用@Validated注解给这个Bean开启数据校验功能。
然后可以在对应的成员变量上面写限制范围了。
@Max(value = 8888,message = "最大值不可以超过8888")
private int port;