java - 在哪里可以关闭我的 Spring Boot 应用程序中的 Lettuce Redis 连接?

标签 java spring spring-boot spring-data-redis lettuce

我已经用这样的 Lettuce(io.lettuce.core.api) 配置初始化了 Spring Boot 应用程序

@Configuration
class RedisConfiguration  {

    @Value("${spring.redis.host}")
    private String redisHostname;
    @Value("${spring.redis.port}")
    private int redisPort;

    private StatefulRedisConnection<String, String> redisConnection;
    private static RedisClient redisClient;

    @Bean
    public RedisCommands connectionFactory() {
        RedisURI redisURI = RedisURI.create(redisHostname,redisPort);
        redisClient = RedisClient.create(redisURI);
        redisConnection = redisClient.connect();
        RedisCommands<String, String> syncCommands = 
        redisConnection.sync();
        return syncCommands;
    }
}

我想在应用程序关闭或退出时调用 redisClient.shutdown();。终止redis连接的正确位置是什么?

最佳答案

你有两个选择:

  1. 使用@PreDestroy:
    @PreDestroy
    public StatefulRedisConnection<String, String> redisConnection() {
        redisConnection.close();
        redisClient.close();
    }
  1. 通过@Bean 方法

确保将 RedisClientStatefulRedisConnection 作为 beans 公开。命令接口(interface) (RedisCommands) 不公开 close() 方法。

@Configuration
class RedisConfiguration  {

    @Value("${spring.redis.host}")
    private String redisHostname;
    @Value("${spring.redis.port}")
    private int redisPort;

    @Bean(destroyMethod = "close")
    public StatefulRedisConnection<String, String> redisClient() {
        RedisURI redisURI = RedisURI.create(redisHostname,redisPort);
        return RedisClient.create(redisURI);
        redisConnection = redisClient.connect();
    }

    @Bean(destroyMethod = "close")
    public StatefulRedisConnection<String, String> redisConnection(RedisClient client) {
        return client.connect();
    }

    @Bean
    public RedisCommands redisCommands(StatefulRedisConnection<String, String> connection) {
        return connection.sync();
    }
}

第一个方法较短,而 @Bean 方法允许您与应用程序中的中间对象进行交互。

关于java - 在哪里可以关闭我的 Spring Boot 应用程序中的 Lettuce Redis 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56384612/

相关文章:

java - 什么时候应该在 Spring 中使用 TypeExcludeFilters?

java - org.json JSONObject 在从 Spring Boot Controller 返回时向 JSONObject 添加额外的对象

java - undertow 的路由模板格式

java - Android NFS 客户端

Java 编译器错误 : lookup table exceeds 65535 limit

java - 为什么基本的 spring 4 示例不能使用 Eclipse kepler 运行?

java - 将列表映射到另一个列表并修改字段 [Mapstruct]

java - proxyMode ScopedProxyMode.TARGET_CLASS 与 ScopedProxyMode.INTERFACE

java - Spring Security + Flex + BlazeDS 登录问题

java - Spring Boot + Spring Data Multi-Tenancy