SpringBoot——配置高级

导读:本篇文章讲解 SpringBoot——配置高级,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

@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正常加载

SpringBoot——配置高级

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

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

举例:

引入druid

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

SpringBoot——配置高级

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

datasource:
  driverClassName: com.musql.jdbc.Driver12312312313

SpringBoot——配置高级

tip:

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

@EnableConfigurationProperties和@ConfigurationProperties的区别

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

SpringBoot——配置高级

SpringBoot——配置高级

宽松绑定/松散绑定

问题描述:

SpringBoot——配置高级

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

SpringBoot——配置高级

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

SpringBoot——配置高级

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

SpringBoot——配置高级

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

SpringBoot——配置高级

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

常用计量单位绑定

配置文件:

SpringBoot——配置高级

 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常用单位:

SpringBoot——配置高级

SpringBoot——配置高级

数据校验

开启数据校验有助于系统安全性,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开启校验功能

SpringBoot——配置高级

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

SpringBoot——配置高级

 结果:

SpringBoot——配置高级

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

进制数据转换规则

问题描述:

SpringBoot——配置高级

SpringBoot——配置高级

SpringBoot——配置高级

 解决方法:

SpringBoot——配置高级

原因:

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

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

SpringBoot——配置高级

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99456.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!