• 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意:

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

    需要导入lomok的依赖:

    
    			org.projectlombok
    			lombok
    		
    
    • 1
    • 2
    • 3
    • 4

    ??编写application.yml

    servers:
      ipAddress: 168.225.0.15
      port: 1234
      timeout: -1
    
    • 1
    • 2
    • 3
    • 4

    ??编写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); 
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果: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);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行结果:com.mysql.jdbc.Driver

    ??方式二

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

    ??编写application.yml

    servers:
      ipAddress: 168.225.0.15
      port: 1234
      timeout: -1
    dataSource:
      driverClassName: com.mysql.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ??编写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()); 
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行结果: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()); 
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ??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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意:@EnableConfigurationProperties@Component不能同时使用

    ??解除使用@ConfigurationProperties注释警告

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

    
    			org.springframework.boot
    			spring-boot-configuration-processor
    		
    
    • 1
    • 2
    • 3
    • 4

    ??宽松绑定

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

    以ipAddress为例:
    ??驼峰模式

     ipAddress: 168.225.0.15
    
    • 1

    ??下划线模式

    ip_address: 168.225.0.15
    
    • 1

    ??中划线模式

    IP_ADD_R-E-SS: 168.225.0.15
    
    • 1

    ??常量模式

    IP_ADDRESS: 168.225.0.15
    
    • 1

    ??大写模式

     IPADDRESS: 168.225.0.15
    
    • 1

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

      ip-address: 168.225.0.15
    
    • 1
    • 宽松绑定不支持注解@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}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    ??常量计量单位绑定

    • 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校验框架对应坐标

    	
    			javax.validation
    			validation-api
    		
    
    • 1
    • 2
    • 3
    • 4

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

    
    			org.hibernate.validator
    			hibernate-validator
    		
    
    • 1
    • 2
    • 3
    • 4

    ??对Bean开启校验功能

    @ConfigurationProperties(prefix = "servers")
    @Validated
    @Data
    public class ServerConfig {
        private String ipAddress;
        private int port;
        private long timeout;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ??设置校验规则

    @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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    ??进制数据转换规则

    ??案例模拟

    ??编写application.yml

    servers:
      ipAddress: 168.225.0.15
      port: 1234
      timeout: -1
    dataSource:
      driverClassName: com.mysql.jdbc.Driver
      password: 0123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ??编写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); 
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试结果是个八进制的83。

    ???注意:根据字面值表达方式,String类型的需要使用双引号包裹。
    
    • 1

    ??重新编写application.yml

    servers:
      ipAddress: 168.225.0.15
      port: 1234
      timeout: -1
    dataSource:
      driverClassName: com.mysql.jdbc.Driver
      password: "0123"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    未来的产品经理,需要什么样的原型设计工具?
    CountDownLatch、CyclicBarrier、Semaphore案例
    SAAS智能打印设计->自定义打印模板
    写过vue自定义指令吗,原理是什么?.m
    Java基础:Stream流和方法引用
    软件项目验收测试需提供哪些资料?找软件测试外包公司的好处?
    SpringBoot / Vue 对SSE的基本使用(简单上手)
    shiro
    Oracle数据库相关操作(20220709)
    病毒攻防原理
  • 原文地址:https://blog.csdn.net/m0_67393619/article/details/126114352