SpringBoot——配置高级

目录

@ConfigurationProperties

第三方bean属性绑定

宽松绑定/松散绑定

常用计量单位绑定

数据校验

bean属性校验

进制数据转换规则


@ConfigurationProperties

第三方bean属性绑定

自定义一个配置类Bean

package com.zqf.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "servers")//填写要获取属性的上一级
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

拿到容器并getBean:

package com.zqf;

import com.zqf.config.ServerConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot13ConfigurationApplication {

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

}

可以看到bean正常加载

思考:这里是自定义的bean,如果是第三方bean呢?

不光自定义的bean可以注入数据,第三方bean也可以注入数据

举例:

引入druid

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>

现在打算DriverClassName从外部注入进来,这个值从配置文件中来。

datasource:
  driverClassName: com.musql.jdbc.Driver12312312313

tip:

        @EnableConfigurationProperties()这个注解可以清晰看到有哪些东西是从我们的配置中读取属性的,这样的管理没有那么松散。

@EnableConfigurationProperties和@ConfigurationProperties的区别

  • 一个具体做属性绑定,另外一个呢是开启属性绑定,并设定对应的目标是谁。

宽松绑定/松散绑定

问题描述:

        对于我们在使用@ConfigurationProperties这个注解的时候,他绑定属性对于名称上的要求其实是非常灵活的,此后的为了充分的接触各种各样的编程爱好者的书写习惯,springboot设定了若干种匹配格式。  

  • @ConfigurationProperties绑定属性支持属性名宽松绑定

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

  • 绑定前缀名(注解里的prfix属性值)命名规范:仅能使用纯小写字母数字下划线作为合法的字符
  • 规范的名称(类的属性名称)应该是烤肉串(kebabl)模式(case),即使用-分隔,使用小写字母数字作为标准字符,且必须以字母开头。

  • 如果我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用 @Value
  • 如果我们专门编写了一个 JavaBean 来和配置文件进行映射,我们就直接使用@ConfigurationProperties

常用计量单位绑定

配置文件:

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

package com.zqf.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 java.time.Duration;
import java.time.temporal.ChronoUnit;

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

    //自定义时间计量单位
    @DurationUnit(ChronoUnit.MINUTES)
    private Duration serverTimeOut;

    //自定义空间计量单位
    @DataSizeUnit(DataUnit.MEGABYTES)
    private DataSize dataSize;
}

Druation和DataSize常用单位:

数据校验

开启数据校验有助于系统安全性,J2EE规范中JSR303规范定义了一组有关数据校验相关的API。

开启校验框架(validation校验框架由hibernate实现):

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

bean属性校验

  • 1.在需要开启校验功能的类上使用注解@Validated开启校验功能

  • 2.具体的校验规则需要对具体的字段设置校验规则(还有更多接口)

 结果:

启用Bean属性校验
●导 入JSR303与Hibernate校验框架坐标
●使用@Validated注解启 用校验功能
●使用具体校验规则规范数据校验格式

进制数据转换规则

问题描述:

 解决方法:

原因:

        它识别到了零开头的数据之后,并且是个纯数字,他默认将他按照数值进行解析,八进制转十进制,转完之后得到结果直接付给String password。

        springboot建议如果是纯字符串的话,需要用双引号包裹。yaml文件中对于数字的定义支持进制书写格式,如需使用字符串请使用引号明确标注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值