我在其他方法下面有Cache Repo,
@Component
@CacheConfig(cacheNames = "enroll", cacheManager = "springtoolCM")
public class EnrollCasheRepository {
/** The string redis template. */
@Autowired
private StringRedisTemplate stringRedisTemplate;
}
我在pom中使用spring-boot-starter-redis。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
我在使用EnrollCasheRepository
的过滤器中使用@Autowired
。
即使我在application.properties
中注释掉redis属性,而且我的redis服务器也已关闭,但我仍然得到一个EnrollCasheRepository
对象。检查redis是否安装在我的机器上并继续EnrollCasheRepository
(如果是)的更好方法是什么。
我正在寻找一种更好的方法,除非在没有安装redis的情况下抛出异常并继续?
答案 0 :(得分:9)
Spring {boot> redis配置由RedisAutoConfiguration
提供
该类创建连接工厂并初始化StringRedisTemplate
bean。
配置取决于在类路径上使用Jedis 似乎没有测试来检查连接细节是否有效。
如果您希望创建的EnrollCasheRepository
bean依赖于jedis的配置,实现它的最简单方法可能是用@ConditionalOnProperty
注释它并创建一个功能标志配置值。
@Component
@ConditionalOnProperty("redis.enabled")
@CacheConfig(cacheNames = "enroll", cacheManager = "springtoolCM")
public class EnrollCasheRepository {
将标志添加到application.properties(或等效的)
redis.enabled=true
如果你想更聪明一点,比如在创建bean之前检测配置的redis服务器是否可用,那就更复杂了。
您可以将@Conditional
与您自己的Condition
实施一起使用,但这可能比它的价值更麻烦。
你可能最好创建bean,然后测试它是否在事后发挥作用。