Spring Boot Redis 在需要关闭redis的情况下,也可以正常的运行程序的方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot Redis 在需要关闭redis的情况下,也可以正常的运行程序的方案相关的知识,希望对你有一定的参考价值。

参考技术A 以下是个便利贴文。
首先 , 先说说,这篇文章所要解决的问题是什么:
主要就是在,我们突然需要在关闭 redis的时候 进行 运行我们的 spring boot 的程序的 时候 , 这时候 都会突然报错 。 主要的 报错类型就基本就是 redis 未连接的报错类型。然后导致程序挂掉。

主要的原因便是:spring boot redis 的自动配置类(名字忘了,当然,你也可以想办法替换掉这个自动类,也是解决问题的方案之一)。这个类会强迫我们去生成一个对应的redisTemplate , 这个redisTemplate在创建的时候,会需要将 redisConnectionFactory set 进去 。 这时候,会触发 redisConnectionFactory 的 getConnect方法(有时候可能是另外一个获取 集群连接的接口) 。倘若你没有正常连接。程序就会报错,把你程序搞崩。因此,如果你想解决这个问题,最好就从这个 redisConnectionFactory 入手。

redisConnectionFactory 只是一个接口 , 官方目前( 应该说我目前 ) 使用的是 LutteConnectionFactory( 名字太长了记不住,差不多是这个名字) 这个对应的 实体类。我们可以直接继承这个类(我曾经尝试过implements redisConnectionFactory 接口 , 然后内核使用 Lutte ,但是不知道报什么错失败了, 可能是我哪里出了什么小问题 , 可以自己尝试一下),然后改写 , 只需要 getConnection 这个方法 , 使用 try 来 不让报错 下沉把程序搞崩溃了就行 , 下面写个小例子,不一定要按照我的方案来写

Spring-boot中@ConfigurationProperties,@Value,@PropertySource

1.利用@ConfigurationProperties获取配置的值,@ConfigurationProperties是springboot提供的基于安全类型的配置放置。

    application.properties

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.maxIdle=10
spring.redis.maxActive=20

RedisConfig.java

 
@Configuration
@ConfigurationProperties(prefix = "spring.redis"//会在application,properties,查找spring.redis开头的配置
 
public class RedisConfig {
 
//必须有get set放入,否则值注入不进去
 
//匹配   spring.redis.host
 
public String host;
 
//匹配   spring.redis.port
 
public int port;
 
public String getHost() {
  return host;
}
public void setHost(String host) {
   this.host = host;
}
public int getPort() {
   return port;
}
public void setPort(int port) {
   this.port = port;
}

2.利用@Value获取值,在springboot中如果不配置@PropertySource(value="classpath:redis.properties")(配置文件路径),默认是从application.properties中获取值,你也可以配置额外的@PropertySource,如下

 
@PropertySource(value="classpath:redis.properties")
//@PropertySource(value="file:/home/config/redis.properties")
 
 
 
public class RedisConfig {
 
         //从application.properties从获取
 
@Value("${spring.redis.host}"public String host;
 
        //从application.properties从获取
 
@Value("${spring.redis.port}")
public int port;
 
        //从redis中获取.properties从获取
 
        @Value("${name}")
public String name;
 
  }

 

@ConfigurationProperties

为springboot 专用的属性注入属性  文件名必须是application.properties/applicaiton.yml 默认为全局文件中获取这些熟悉值 

@Value,

value 属性 处理能支持spel表达式以外 全部不如 ConfigurationProperties

@PropertySource

需要指定(classpath:xxxx.properties)加载指定的配置文件

 

 

 

 


作者:盲目的拾荒者
来源:CSDN
原文:https://blog.csdn.net/niugang0920/article/details/80612070

以上是关于Spring Boot Redis 在需要关闭redis的情况下,也可以正常的运行程序的方案的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot + Mybatis plus + Redis实现二级缓存

Spring-boot中@ConfigurationProperties,@Value,@PropertySource

Spring Boot 在自定义类中使用组件? [关闭]

Java 在spring cloud中使用Redis,spring boot同样适用

Spring Boot如何整合Redis

Spring Boot如何整合Redis