在 Spring Boot 应用程序中,哪里可以关闭 Lettuce Redis 连接?

Abh*_*hii 3 java spring lettuce spring-data-redis spring-boot

我已经使用 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

mp9*_*1de 5

您有两个选择:

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

确保将RedisClient和暴露StatefulRedisConnection为豆子。命令接口 ( 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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