SpringBoot实用篇二(高级配置)

SpringBoot实用篇二(高级配置)

1、@ConfigurationProperties(prefix = " ”)

创建ServerConfig实体类

/**
 * 项目名称:SpringBootProject
 * 描述:属性类
 *
 * @author zhong
 * @date 2022-05-26 6:35
 */
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    
    
    private Integer port;
    private String ipAddress;
    private long timeout;
}

获取属性【设置属性值】

servers:
  port: 8080
  ipAddress: 198.168.0.1
  timeout: -1

在引导类里面获取到

@SpringBootApplication
public class Springboot12ConfigurationApplication {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext run = SpringApplication.run(Springboot12ConfigurationApplication.class, args);
        ServerConfig bean = run.getBean(ServerConfig.class);
        System.out.println(bean);
    }

启动的时候,就会将配置里面设置的属性输出

@ConfigurationProperties(prefix = " ”)为第三方bean数据绑定

  1. 导入druid坐标

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>
    
  2. 配置文件设置

    datasource:
      driverClassName: com.mysql.jdbc.Driver
    
  3. 引导类设置

    @SpringBootApplication
    public class Springboot12ConfigurationApplication {
          
          
    
        @Bean
        @ConfigurationProperties(prefix = "datasource")
        public DruidDataSource dataSource() {
          
          
            DruidDataSource dataSource = new DruidDataSource();
            // dataSource.setDriverClassName("123");
            return dataSource;
        }
    
        public static void main(String[] args) {
          
          
            ConfigurableApplicationContext run = SpringApplication.run(Springboot12ConfigurationApplication.class, args);
            ServerConfig bean = run.getBean(ServerConfig.class);
            DruidDataSource druidbean = run.getBean(DruidDataSource.class);
            System.out.println(druidbean.getDriverClassName()); // com.mysql.jdbc.Driver
            System.out.println(bean);
        }
    }
    

    可以在对象里面自定义设置set的值,也可以通过@ConfigurationProperties(prefix = "datasource")注解绑定

比较

// 具体的做属性绑定,必须有`@Component`注解设置bean
@ConfigurationProperties(prefix = "datasource")
// 开启属性绑定,并设置bean,如果类里面也使用了`@Component`注解设置bean那么就要去掉,否则会报2个bean的错误
@EnableConfigurationProperties(ServerConfig.class)

Exception in thread “main” org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ‘com.zcl.config.ServerConfig’ available: expected single matching bean but found 2: serverConfig,servers-com.zcl.config.ServerConfig

关于springboot注解报错提示的解决方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GUJPhCW9-1653524590741)(images/31、springboot注解报错.png)]

导入依赖坐标

<!--设置注解坐标-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

宽松绑定

@ConfigurationProperties(prefix = “datasource”)绑定的属性名支持属性名宽松绑定

入下属性

// @Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    
    
    private Integer port;
    private String ipAddress;
    private long timeout;
}

在配置文件中如下的写法都可以获取到值绑定到ipAddress属性上

支持如下格式:

  1. 驼峰模式
  2. 下划线模式
  3. 中划线模式
  4. 常量模式
servers:
  port: 8080
  // ipAddress: 198.168.0.1 # 驼峰
  // ipaddress: 198.168.0.1
  // ip_address: 198.168.0.1 # unline
  // ip-address: 198.168.0.1  # 烤肉串模式
  // IP_ADDRESS: 198.168.0.1 # 常量
  ip_A-d_dr_ess: 198.168.0.1
  timeout: -1
注意:

宽松绑定不支持注解@Value引用单个属性的方式

@ConfigurationProperties(prefix = “datasource”)绑定前缀命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符

2、常用计量单位应用

JDK8支持的时间与空间计量单位

配置文件设置如下:

servers:
  port: 8080
  ip-address: 198.168.0.1
  timeout: -1
  serverTimeOut: 3
  dataSize: 1024

上面设置了一个时间单位和存储大小,二如果不指定的话我们就不知道指定的单位是上面,会造成很大的困惑,所以需要如下设置进行指定

// @Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    
    
    private Integer port;
    private String ipAddress;
    private long timeout;
    // 默认是毫秒,指定为消失
    @DurationUnit(ChronoUnit.HOURS)
    private Duration serverTimeOut; // serverTimeOut=PT3H
    // 默认的b字节大小,修改
    @DataSizeUnit(DataUnit.KILOBYTES)
    private DataSize dataSize; // dataSize=1048576B
}

Bean属性校验

导入校验框架

<!--导入JSR303校验规范,接口-->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>
<!-- 使用hibernate框架提供的校验器做实现类 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>

在属性实体类上面开启Bean校验功能

/**
 * 项目名称:SpringBootProject
 * 描述:属性类
 *
 * @author zhong
 * @date 2022-05-26 6:35
 */
// @Component
@Data
@ConfigurationProperties(prefix = "servers")
// 设置校验规则
@Validated
public class ServerConfig {
    
    
    @Max(value = 8888,message = "设置的最大值不可超过8888")
    @Min(value = 10,message = "最小值不能低于10")
    private Integer port;
    private String ipAddress;
    private long timeout;
    // 默认是毫秒,指定为消失
    @DurationUnit(ChronoUnit.HOURS)
    private Duration serverTimeOut; // serverTimeOut=PT3H
    // 默认的b字节大小,修改
    @DataSizeUnit(DataUnit.KILOBYTES)
    private DataSize dataSize; // dataSize=1048576B
}

在配置文件中修改最大值

servers:
  port: 9999

当出现超出最大值的时候,会出现如下的错误消息

Property: servers.port
Value: 9999
Origin: class path resource [application.yml] - 2:9
Reason: 设置的最大值不可超过8888

进制数据转换规则

如果是传递字符串类型的,要使用“ ”包裹,否则可能会出现进制转换

猜你喜欢

转载自blog.csdn.net/baidu_39378193/article/details/124977760
今日推荐