目录
- 一.@ConfigurationProperties注解
- 补充知识:
- 二、松散绑定
- 三、常用计量单位的应用
- 四、数据校验
- 补充知识
一.@ConfigurationProperties注解
使用该注解可以为Bean绑定application.yml中的属性值。以下就是使用@ConfigurationProperties注解的示例
项目结构
ServerConfig.class
package com.example.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties("servers") //填写属性名上一级名称
public class ServerConfig {
private String ipaddress;
private int port;
private long timeout;
}
加载类
package com.example;
import com.alibaba.druid.pool.DruidDataSource;
import com.example.config.ServerConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Springboot01ConfigurationApplication {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
DruidDataSource ds=new DruidDataSource();
// ds.setDriverClassName("com.mysql.jdbc.driver");
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(Springboot01ConfigurationApplication.class, args);
ServerConfig config = ctx.getBean(ServerConfig.class);
System.out.println(config);
DruidDataSource ds = ctx.getBean(DruidDataSource.class);
System.out.println(ds.getDriverClassName());
}
}
applicati.yml
servers:
ipaddress: 127.0.0.1
port: 2345
timeout: -1
datasource:
driverClassName: com.mysql.jdbc.Driver
补充知识:
1.@EnableConfigurationProperties注解与@ConfigurationProperties的关系:
可以在加载类中加载管理的配置,自动将配置类作为Bean。
2.解决如下问题
在pom依赖中添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
二、松散绑定
在application.yml中设置的属性会自动去掉下划线中划线将大写变为小写后与@ConfigurationProperties中的注解进行匹配,而@value不会这样匹配。这种匹配即为松散绑定。
servers:
ipaddress: 127.0.0.1
port: 2345
timeout: -1
datasource:
driverClassName: com.mysql.jdbc.Driver
三、常用计量单位的应用
Duration类型,表示时间范围单位
DataSize类型,表示存储空间单位
@DurationUnit(ChronoUnit.HOURS)
private Duration serverTimeOut;
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
四、数据校验
1.导入对应依赖
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
2.对实体类添加校验并对具体字段添加具体的验证
package com.example.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.stereotype.Component;
import org.springframework.util.unit.DataSize;
import org.springframework.util.unit.DataUnit;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
@Component
@Data
@Validated
@ConfigurationProperties("servers") //填写属性名上一级名称
public class ServerConfig {
private String ipaddress;
@Max(value = 8888,message = "最大值不能超过8888")
@Min(value = 3,message = "最小值不能小于3")
private int port;
private long timeout;
@DurationUnit(ChronoUnit.HOURS)
private Duration serverTimeOut;
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
}
补充知识
进制数据转换问题
yaml中八进制和十六进制的规则
八进制 0 ***** 0开头,X为1~7
十六进制 0X ****** 0X开头,X为0~9,A-F