Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性

时间:2022-08-18 00:33:24

在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性。但那是因为 Spring 提供了将上下文对象传递给 matches 方法的能力。

对于其它的类,想要获取配置属性,可以建立一个配置类,使用 ConfigurationProperties 注解,将配置属性匹配到该类的属性上。(当然,也可以使用不使用 ConfigurationProperties 注解,而使用 @Value注解)

如果要使用 ConfigurationProperties 注解,需要先在 Application 类上添加 @EnableConfigurationProperties 注解:

@SpringBootApplication
@PropertySource(value = {"file:${root}/conf/${env}/application.properties", "file:${root}/conf/${env}/business.properties"})
@EnableConfigurationProperties
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

假设 properties 文件中有如下配置属性:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.timeout=2000
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0

创建 RedisProperties 类如下:

@Component
@ConfigurationProperties(prefix="spring.redis")
@Data
Class RedisProperties {
private String host;
private String port;
private String password;
private String timeout;
private Map<?, ?> pool;
}

引入这个 Bean,就可以读取到相应的属性了。

注意,所有的属性必须有 Setter 和 Getter 方法,上例中,使用了 lombok 的 Data 注解,它会自动为私有属性添加 Setter 和 Getter 方法)。

还要注意属性的类型,如果是获取最后一级的配置属性,类型为 String,如果不是最后一级,则类型为 Map。

import lombok.extern.slf4j.Slf4j;

@Slf4j
Class RedisPropertiesTest {
@Autowired
private RedisProperties redisProperties; public void test() {
log.info(redisProperties.getHost());
Map<?, ?> pool = (Map) redisProperties.getPool();
log.info(pool.get("min-idle").toString());
}
}

打印出来的结果是:

127.0.0.1
0

Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性的更多相关文章

  1. Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock

    在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...

  2. Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题

    按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...

  3. Spring Boot 2 实践记录之 Redis 及 Session Redis 配置

    先说 Redis 的配置,在一些网上资料中,Spring Boot 的 Redis 除了添加依赖外,还要使用 XML 或 Java 配置文件做些配置,不过经过实践并不需要. 先在 pom 文件中添加 ...

  4. Spring Boot 2 实践记录之 Powermock 和 SpringBootTest

    由于要代码中使用了 Date 类生成实时时间,单元测试中需要 Mock Date 的构造方法,以预设其行为,这就要使用到 PowerMock 在 Spring Boot 的测试套件中,需要添加 @Ru ...

  5. Spring Boot 2 实践记录之 使用 Powermock、Mockito 对 UUID 进行 mock 单元测试

    由于注册时,需要对输入的密码进行加密,使用到了 UUID.sha1.md 等算法.在单元测试时,使用到了 Powermock,记录如下. 先看下加密算法: import org.apache.comm ...

  6. Spring Boot 2 实践记录之 组合注解原理

    Spring 的组合注解功能,网上有很多文章介绍,不过都是介绍其使用方法,鲜有其原理解析. 组合注解并非 Java 的原生能力.就是说,想通过用「注解A」来注解「注解B」,再用「注解B」 来注解 C( ...

  7. Spring Boot 2 实践记录之 MySQL &plus; MyBatis 配置

    如果不需要连接池,那么只需要简单的在pom文件中,添加mysql依赖: <dependency> <groupId>mysql</groupId> <arti ...

  8. Spring Boot 2 实践记录之 条件装配

    实验项目是想要使用多种数据库访问方式,比如 JPA 和 MyBatis. 项目的 Service 层业务逻辑相同,只是具体实现代码不同,自然是一组接口,两组实现类的架构比较合理. 不过这种模式却有一个 ...

  9. Spring Boot 之日志记录

    Spring Boot 之日志记录 Spring Boot 支持集成 Java 世界主流的日志库. 如果对于 Java 日志库不熟悉,可以参考:细说 Java 主流日志工具库 关键词: log4j, ...

随机推荐

  1. c&num; &lpar;ENUM&rpar;枚举组合类型的谷歌序列化Protobuf

    c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...

  2. 关于NSNotificationCenter消息通信用法

    NSNotificationCenter主要用于广播消息到多个监听着,其传统用法 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotification ...

  3. AJAX小练习,防止以后忘记

    <div id="content"> <input id="btnShow" type="button" value=&q ...

  4. Tesla为什么要公开专利

    这是今天在网上看到Tesla公司的专利墙图片,还是比较有视觉冲击力的,正好可以转来当配图. 业界先锋Tesla日前惊世骇俗地公开电动汽车专利,赢得如潮好评:不过大家都知道,对于西方科技公司,专利历来是 ...

  5. Webservice服务中如何保持Session

    问题一:webservice服务中如果保持Session 调用Session 对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里 ...

  6. 第一个android程序所遇到问题

    1.工程package的命名空间与activity的命名空间不一致,导致setcontentview找不到layout文件 2.增加Button等控件后,Java.R中id必须在删除现有Java.R文 ...

  7. Python之函数知识

    Python函数分类 a,内置函数 b,自定义函数 c,导入函数 一个函数就相当于一个功能块,比如获取数据库,更新数据库,函数其实就是代码的分块,调用函数来执行代码块 一块就代表一个功能 内置函数有以 ...

  8. Kubernetes知识小普及

    大部分概念Kubernetes官网都有详细介绍,Kubernetes中文官网 https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/ 官网 ...

  9. CentOS 7 部署Gitlab&plus;Jenkins持续集成&lpar;CI&rpar;环境

    持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试  开发→代 ...

  10. 解析:为什么程序员应该有一台Mac个人电脑?

    对于开发来讲,使用Mac电脑的好处,下面简单列举几个: 首先,macOS很安全和稳定,Mac 系统的底层是最原始的unix操作系统,很多大型的银行和军工企业都是这个操作系统,安全性很高,基本不需要安装 ...