@ConfigurationProperties嵌套数据获取

本文介绍了在SpringBoot中如何使用@ConfigurationProperties来简化配置文件中嵌套参数的读取。通过实例展示了在集成redis时,如何避免使用@Value逐个注入属性,而是通过配置映射对象实现代码优化。
摘要由CSDN通过智能技术生成


前言

学习springboot时,集成redis了解到@ConfigurationProperties可以读取嵌套参数。


一、场景及问题

环境:

  1. jdk:1.8 windows
  2. springboot:2.4
  3. gradle:6.6.1
  4. IDE:idea

学习springboot集成redis(单机)时,配置文件中的属性,在编写redis的config类时用@value一个个引入,觉着挺麻烦的就想能不能将代码优化的更少一些。

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.pool.max-active}")
    private int maxActive;
    @Value("${spring.redis.pool.max-wait}")
    private int maxWait;
    @Value("${spring.redis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.pool.min-idle}")
    private int minIdle;

二、使用步骤

1.引入库

jar包在maven中央仓库,为什么使用下面的方式有两点: 1.创建的是gradle工程; 2.不这么引用idea中对应的对象上面会报: ![报错](https://img-blog.csdnimg.cn/20201128141236746.png#pic_center) 这个报错解决方案,跟gradle版本有点关系,点击后面的“扳手”前面进官方文档看一下就好了
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"

2.效果

配置

 redis:
    #redis主机连接地址(默认使用本地连接)
    host: localhost
    #Redis服务器连接端口
    port: 6379
    #Redis服务器连接密码(默认为空)
    password:
    jedis:
      pool:
        #连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
        #连接池中的最大空闲连接
        max-idle: 8
        #连接池中的最小空闲连接
        min-idle: 0
    #连接超时时间(毫秒)
    timeout: 300000

连接池配置映射对象

@Component
@Data
@ConfigurationProperties(prefix = "spring.redis.jedis.pool")
public class RedisPoolInfo implements Serializable {
    private static final long serialVersionUID = -4759947852733354508L;
    private String maxActive;
    private String maxWait;
    private String maxIdle;
    private String minIdle;
}

redis包含连接池的配置映射对象

@Component
@Data
@ConfigurationProperties(prefix = "spring.redis")
public class RedisInfo implements Serializable {
    private static final long serialVersionUID = -2656508921689079919L;
    private final RedisPoolInfo poolInfo;
    @Autowired
    public RedisInfo(RedisPoolInfo redisPoolInfo) {
        this.poolInfo = redisPoolInfo;
    }
    private String host;
    private String port;
    private String passWord;
    private String timeOut;
}

打印

@SpringBootTest
class AppTests {
    @Autowired
    RedisInfo redisInfo;
    @Test
    void contextLoads() {
        System.out.println(redisInfo.toString());
    }
}

结果

RedisInfo(poolInfo=RedisPoolInfo(maxActive=8, maxWait=-1, maxIdle=8, minIdle=0), host=localhost, port=6379, passWord=, timeOut=300000)

总结

以此仅作记录,以后再深入研究底层
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值