SpringBoot-配置高级

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: SpringBoot-配置高级

在这里插入图片描述

🍁博客主页:👉 不会压弯的小飞侠
✨欢迎关注:👉点赞👍收藏⭐留言✒
✨系列专栏:👉 SpringBoot专栏(每日更新)
✨如果觉得博主的文章还不错的话,请三连支持一下博主。
🔥欢迎大佬指正,一起 学习!一起加油!
在这里插入图片描述

在这里插入图片描述

🍁@ConfigurationProperties注入

🔥创建一个新的模板

此过程就不在这介绍了,在我SpringBoot专栏里有详细过程。
⭐⭐⭐注意的是加入所需的支持这什么也不勾选。
在这里插入图片描述

🔥ServerConfig.java

package com.jkj.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "servers")
@Component
@Data
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

⭐⭐⭐注意:

  • @Data

    • 为当前实体类在编译期设置对应的get/set,toString方法,hashCode方法,equals方法等。

需要导入lomok的依赖:

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

🔥编写application.yml

servers:
  ipAddress: 168.225.0.15
  port: 1234
  timeout: -1

🔥编写ConfigurationApplication.java

@SpringBootApplication
public class ConfigurationApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
        ServerConfig bean = cac.getBean(ServerConfig.class);
        System.out.println(bean); 
    }
}
运行结果:ServerConfig(ipAddress=168.225.0.15, port=123456, timeout=-1)

🔥给第三方Bean绑定属性

🔥方式一

🔥编写ConfigurationApplication.java

@SpringBootApplication
public class ConfigurationApplication {
    @Bean
    public DruidDataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        return ds;
    }
    public static void main(String[] args) {
        ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
        ServerConfig bean = cac.getBean(ServerConfig.class);
        System.out.println(bean); 
        DruidDataSource ds = cac.getBean(DruidDataSource.class);
        System.out.println(ds);
    }
}
运行结果:com.mysql.jdbc.Driver

🔥方式二

  • 使用@ConfigurationProperties为第三方bean绑定属性

🔥编写application.yml

servers:
  ipAddress: 168.225.0.15
  port: 1234
  timeout: -1
dataSource:
  driverClassName: com.mysql.jdbc.Driver

🔥编写ConfigurationApplication.java

@SpringBootApplication
public class ConfigurationApplication {
    @Bean
    @ConfigurationProperties(prefix = "datasource")
    public DruidDataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        return ds;
    }
    public static void main(String[] args) {
        ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
        ServerConfig bean = cac.getBean(ServerConfig.class);
        System.out.println(bean); 
        DruidDataSource ds = cac.getBean(DruidDataSource.class);
        System.out.println(ds.getDriverClassName()); 
    }
}
运行结果:com.mysql.jdbc.Driver

🔥@EnableconfigurationProperties

  • @EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器

🔥ConfigurationApplication.java

@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class ConfigurationApplication {
    @Bean
    @ConfigurationProperties(prefix = "datasource")
    public DruidDataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        return ds;
    }
    public static void main(String[] args) {
        ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
        ServerConfig bean = cac.getBean(ServerConfig.class);
        System.out.println(bean); 
        DruidDataSource ds = cac.getBean(DruidDataSource.class);
        System.out.println(ds.getDriverClassName()); 
    }
}

🔥ServerConfig.java

package com.jkj.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "servers")
@Data
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}
⭐⭐⭐注意: @EnableConfigurationProperties@Component不能同时使用

🔥解除使用@ConfigurationProperties注释警告

在这里插入图片描述
加入依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

🍁宽松绑定

  • 宽松绑定就是configrationProperties注入的书写规范并不严格,大小写,下划线、中划线、springboot都可以忽略。
  • @ConfigurationProperties绑定属性支持属性名宽松绑定。

以ipAddress为例:
🔥驼峰模式

 ipAddress: 168.225.0.15

🔥下划线模式

ip_address: 168.225.0.15

🔥中划线模式

IP_ADD_R-E-SS: 168.225.0.15

🔥常量模式

IP_ADDRESS: 168.225.0.15

🔥大写模式

 IPADDRESS: 168.225.0.15

🔥烤肉串模式(推荐使用)

  ip-address: 168.225.0.15
  • 宽松绑定不支持注解@Value引用单个属性的方式

🔥测试:

package com.jkj;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot06ConfigurationApplicationTests {
    @Value("${servers.ipAddress}")
    private String msg;

    @Test
    void contextLoads() {
        System.out.println(msg); 
    }

}
报错信息:Could not resolve placeholder 'servers.ipAddress' in value "${servers.ipAddress}"

🍁常量计量单位绑定

  • SpringBoot支持JDK8提供的时间与空间计量单位
package com.jkj.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.util.unit.DataSize;
import org.springframework.util.unit.DataUnit;
import java.time.Duration;
import java.time.temporal.ChronoUnit;

@ConfigurationProperties(prefix = "servers")
@Data
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
    @DurationUnit(ChronoUnit.DAYS)
    private Duration serverTimeOut;
    @DataSizeUnit(DataUnit.TERABYTES)
    private DataSize dataSize;
}

🔥常用计量单位

  • ChronoUnit

在这里插入图片描述

  • DataUnit

在这里插入图片描述

🍁数据校验

🔥添加了SR303规范坐标与Hibernate校验框架对应坐标

    <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>

🔥使用hibernate框架提供的校验器做实现类

<dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

🔥对Bean开启校验功能

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

🔥设置校验规则

@ConfigurationProperties(prefix = "servers")
@Validated
@Data
public class ServerConfig {
    private String ipAddress;
    @Max(value = 9999,message = "最大值不能超过9999")
    @Min(value = 1111,message = "最小值不能超过1111")
    private int port;
    private long timeout;
}

🔥yml文件中port设置为1234,测试结果如下
在这里插入图片描述

🍁进制数据转换规则

🔥案例模拟

🔥编写application.yml

servers:
  ipAddress: 168.225.0.15
  port: 1234
  timeout: -1
dataSource:
  driverClassName: com.mysql.jdbc.Driver
  password: 0123

🔥编写ConfigureApplication,java

package com.jkj;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot06ConfigurationApplicationTests {
    @Value("${dataSource.Password}")
    private Password psw;

    @Test
    void contextLoads() {
        System.out.println(psw); 
    }

}
测试结果是个八进制的83。
⭐⭐⭐注意:根据字面值表达方式,String类型的需要使用双引号包裹。

🔥重新编写application.yml

servers:
  ipAddress: 168.225.0.15
  port: 1234
  timeout: -1
dataSource:
  driverClassName: com.mysql.jdbc.Driver
  password: "0123"

运行结果:
在这里插入图片描述
在这里插入图片描述

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
消息中间件 缓存 监控
spring boot 高级篇
spring boot 高级篇
175 1
|
3月前
|
Java 数据安全/隐私保护
SpringBoot - 优雅的实现【参数分组校验】高级进阶
SpringBoot - 优雅的实现【参数分组校验】高级进阶
86 0
|
11月前
|
Java 容器 Spring
SpringBoot高级 3
SpringBoot高级
45 1
|
11月前
|
NoSQL Java Redis
SpringBoot高级 2
SpringBoot高级
54 1
|
3月前
|
安全 Java 容器
SpringBoot - 优雅的实现【业务校验】高级进阶
SpringBoot - 优雅的实现【业务校验】高级进阶
147 0
|
3月前
|
Java Spring
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
62 0
|
3月前
|
JSON 前端开发 Java
SpringBoot - 优雅的实现【参数校验】高级进阶
SpringBoot - 优雅的实现【参数校验】高级进阶
77 0
|
3月前
|
Java API
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
166 0
|
3月前
|
前端开发 Java 测试技术
SpringBoot测试——高级配置
SpringBoot测试——高级配置
52 0
|
3月前
|
消息中间件 SQL Java
spring boot Rabbit高级教程(三)
spring boot Rabbit高级教程
86 0