@ConfigurationProperties嵌套数据获取

  • Post author:
  • Post category:其他





前言


学习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中对应的对象上面会报:

报错


这个报错解决方案,跟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)



总结


以此仅作记录,以后再深入研究底层



版权声明:本文为ludengxiadezhuzi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。