package com.genersoft.iot.vmp.conf; 
 | 
  
 | 
import org.springframework.data.redis.connection.RedisConnection; 
 | 
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; 
 | 
import org.springframework.data.redis.listener.RedisMessageListenerContainer; 
 | 
  
 | 
import java.util.Properties; 
 | 
  
 | 
public class RedisKeyExpirationEventMessageListener extends KeyExpirationEventMessageListener { 
 | 
  
 | 
    private UserSetting userSetting; 
 | 
    private RedisMessageListenerContainer listenerContainer; 
 | 
    private String keyspaceNotificationsConfigParameter = "EA"; 
 | 
  
 | 
    public RedisKeyExpirationEventMessageListener(RedisMessageListenerContainer listenerContainer, UserSetting userSetting) { 
 | 
        super(listenerContainer); 
 | 
        this.listenerContainer = listenerContainer; 
 | 
        this.userSetting = userSetting; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void init() { 
 | 
        if (!userSetting.getRedisConfig()) { 
 | 
            // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用 
 | 
            setKeyspaceNotificationsConfigParameter(""); 
 | 
        }else { 
 | 
  
 | 
            RedisConnection connection = this.listenerContainer.getConnectionFactory().getConnection(); 
 | 
            Properties config = connection.getConfig("notify-keyspace-events"); 
 | 
            try { 
 | 
                if (!config.getProperty("notify-keyspace-events").equals(keyspaceNotificationsConfigParameter)) { 
 | 
                    connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter); 
 | 
                } 
 | 
            } finally { 
 | 
                connection.close(); 
 | 
            } 
 | 
        } 
 | 
        super.init(); 
 | 
    } 
 | 
} 
 |