前言
学习springboot时,集成redis了解到@ConfigurationProperties可以读取嵌套参数。
一、场景及问题
环境:
- jdk:1.8 windows
- springboot:2.4
- gradle:6.6.1
- 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)