SpringBoot高级配置实例分析(springboot,开发技术)

时间:2024-05-05 03:45:14 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

本文小编为大家详细介绍“SpringBoot高级配置实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot高级配置实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    @ConfigurationProperties注入

    创建一个新的模板

    注意的是加入所需的支持这什么也不勾选。

    SpringBoot高级配置实例分析

    ServerConfig.java

    packagecom.jkj.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@ConfigurationProperties(prefix="servers")@Component@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;}

    注意:

    @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

    @SpringBootApplicationpublicclassConfigurationApplication{ publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); }}

    运行结果:ServerConfig(ipAddress=168.225.0.15, port=123456, timeout=-1)

    给第三方Bean绑定属性

    方式一

    编写ConfigurationApplication.java

    @SpringBootApplicationpublicclassConfigurationApplication{@Bean publicDruidDataSourcedataSource(){ DruidDataSourceds=newDruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); returnds; } publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSourceds=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

    @SpringBootApplicationpublicclassConfigurationApplication{@Bean@ConfigurationProperties(prefix="datasource") publicDruidDataSourcedataSource(){ DruidDataSourceds=newDruidDataSource(); returnds; } publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSourceds=cac.getBean(DruidDataSource.class); System.out.println(ds.getDriverClassName()); }}

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

    @EnableconfigurationProperties

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

    ConfigurationApplication.java

    @SpringBootApplication@EnableConfigurationProperties(ServerConfig.class)publicclassConfigurationApplication{@Bean@ConfigurationProperties(prefix="datasource") publicDruidDataSourcedataSource(){ DruidDataSourceds=newDruidDataSource(); returnds; } publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcac=SpringApplication.run(ConfigurationApplication.class,args); ServerConfigbean=cac.getBean(ServerConfig.class); System.out.println(bean); DruidDataSourceds=cac.getBean(DruidDataSource.class); System.out.println(ds.getDriverClassName()); }}

    ServerConfig.java

    packagecom.jkj.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix="servers")@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;}

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

    解除使用@ConfigurationProperties注释警告

    SpringBoot高级配置实例分析

    加入依赖:

    <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引用单个属性的方式

    测试:

    packagecom.jkj;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTestclassSpringboot06ConfigurationApplicationTests{@Value("${servers.ipAddress}") privateStringmsg; @Test voidcontextLoads(){ System.out.println(msg); }}

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

    常量计量单位绑定

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

    packagecom.jkj.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.boot.convert.DataSizeUnit;importorg.springframework.boot.convert.DurationUnit;importorg.springframework.util.unit.DataSize;importorg.springframework.util.unit.DataUnit;importjava.time.Duration;importjava.time.temporal.ChronoUnit;@ConfigurationProperties(prefix="servers")@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;@DurationUnit(ChronoUnit.DAYS)privateDurationserverTimeOut;@DataSizeUnit(DataUnit.TERABYTES)privateDataSizedataSize;}

    常用计量单位 ChronoUnit

    SpringBoot高级配置实例分析

    DataUnit

    SpringBoot高级配置实例分析

    数据校验

    添加了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@DatapublicclassServerConfig{privateStringipAddress;privateintport;privatelongtimeout;}

    设置校验规则

    @ConfigurationProperties(prefix="servers")@Validated@DatapublicclassServerConfig{privateStringipAddress;@Max(value=9999,message="最大值不能超过9999")@Min(value=1111,message="最小值不能超过1111")privateintport;privatelongtimeout;}

    yml文件中port设置为1234,测试结果如下

    SpringBoot高级配置实例分析

    进制数据转换规则

    案例模拟

    编写application.yml

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

    编写ConfigureApplication,java

    packagecom.jkj;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTestclassSpringboot06ConfigurationApplicationTests{@Value("${dataSource.Password}") privatePasswordpsw; @Test voidcontextLoads(){ 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"

    运行结果:

    SpringBoot高级配置实例分析

    读到这里,这篇“SpringBoot高级配置实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    本文:SpringBoot高级配置实例分析的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:Python怎么使用openpyxl处理Excel文件下一篇:

    17 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18