diff --git a/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultDeletedKeyEventMessageListener.java b/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultDeletedKeyEventMessageListener.java index 0cedaab25f7b51c0142fda40d62288a99155356b..7e2f129c717930cdf13222b20e0de781713d3f49 100644 --- a/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultDeletedKeyEventMessageListener.java +++ b/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultDeletedKeyEventMessageListener.java @@ -2,13 +2,13 @@ package com.hccake.ballcat.common.redis.keyevent.listener; import com.hccake.ballcat.common.redis.keyevent.template.KeyDeletedEventMessageTemplate; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; /** @@ -20,19 +20,23 @@ import java.util.List; @Slf4j public class DefaultDeletedKeyEventMessageListener extends AbstractDeletedKeyEventMessageListener { - @SuppressWarnings("all") - @Autowired(required = false) - @Nullable protected List keyDeletedEventMessageTemplates; /** * Creates new {@link MessageListener} for specific messages. + * * @param listenerContainer must not be {@literal null}. */ public DefaultDeletedKeyEventMessageListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } + public DefaultDeletedKeyEventMessageListener(RedisMessageListenerContainer listenerContainer, + ObjectProvider> objectProvider) { + super(listenerContainer); + objectProvider.ifAvailable(templates -> this.keyDeletedEventMessageTemplates = new ArrayList<>(templates)); + } + @Override public void onMessage(Message message, byte[] pattern) { if (CollectionUtils.isEmpty(keyDeletedEventMessageTemplates)) { diff --git a/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultExpiredKeyEventMessageListener.java b/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultExpiredKeyEventMessageListener.java index 86e61a9b19a1b7915b05c669393bf4cf58f85165..8d5dd540cba3b0f6acc25c2d112f9fc0dc0ba526 100644 --- a/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultExpiredKeyEventMessageListener.java +++ b/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultExpiredKeyEventMessageListener.java @@ -2,13 +2,13 @@ package com.hccake.ballcat.common.redis.keyevent.listener; import com.hccake.ballcat.common.redis.keyevent.template.KeyExpiredEventMessageTemplate; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; /** @@ -20,19 +20,22 @@ import java.util.List; @Slf4j public class DefaultExpiredKeyEventMessageListener extends AbstractExpiredKeyEventMessageListener { - @SuppressWarnings("all") - @Autowired(required = false) - @Nullable protected List keyExpiredEventMessageTemplates; /** * Creates new {@link MessageListener} for specific messages. + * * @param listenerContainer must not be {@literal null}. */ public DefaultExpiredKeyEventMessageListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } + public DefaultExpiredKeyEventMessageListener(RedisMessageListenerContainer listenerContainer, ObjectProvider> objectProvider) { + super(listenerContainer); + objectProvider.ifAvailable(templates -> this.keyExpiredEventMessageTemplates = new ArrayList<>(templates)); + } + @Override public void onMessage(Message message, byte[] pattern) { if (CollectionUtils.isEmpty(keyExpiredEventMessageTemplates)) { @@ -44,8 +47,7 @@ public class DefaultExpiredKeyEventMessageListener extends AbstractExpiredKeyEve for (KeyExpiredEventMessageTemplate keyExpiredEventMessageTemplate : keyExpiredEventMessageTemplates) { if (keyExpiredEventMessageTemplate.support(expiredKey)) { if (log.isTraceEnabled()) { - log.trace("use template[{}]handle key expired event,the expired key is [{}]", - keyExpiredEventMessageTemplate.getClass().getName(), expiredKey); + log.trace("use template[{}]handle key expired event,the expired key is [{}]", keyExpiredEventMessageTemplate.getClass().getName(), expiredKey); } keyExpiredEventMessageTemplate.handleMessage(expiredKey); } diff --git a/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultSetKeyEventMessageListener.java b/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultSetKeyEventMessageListener.java index b16cffe38c704df348caecab5be9df49887af4e7..e8be096345890c7758b194326ae132c81bd0d9f9 100644 --- a/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultSetKeyEventMessageListener.java +++ b/ballcat-common/ballcat-common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultSetKeyEventMessageListener.java @@ -2,13 +2,13 @@ package com.hccake.ballcat.common.redis.keyevent.listener; import com.hccake.ballcat.common.redis.keyevent.template.KeySetEventMessageTemplate; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; /** @@ -20,19 +20,23 @@ import java.util.List; @Slf4j public class DefaultSetKeyEventMessageListener extends AbstractSetKeyEventMessageListener { - @SuppressWarnings("all") - @Autowired(required = false) - @Nullable protected List keySetEventMessageTemplates; /** * Creates new {@link MessageListener} for specific messages. + * * @param listenerContainer must not be {@literal null}. */ public DefaultSetKeyEventMessageListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } + public DefaultSetKeyEventMessageListener(RedisMessageListenerContainer listenerContainer, + ObjectProvider> objectProvider) { + super(listenerContainer); + objectProvider.ifAvailable(templates -> this.keySetEventMessageTemplates = new ArrayList<>(templates)); + } + @Override public void onMessage(Message message, byte[] pattern) { if (CollectionUtils.isEmpty(keySetEventMessageTemplates)) { diff --git a/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/RedisKeyEventAutoConfiguration.java b/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/RedisKeyEventAutoConfiguration.java index 0bab7890c2689d247c777e7b0b63c69d60aade67..242deab503ed276bc23bf80a66d9583ea5e6bde5 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/RedisKeyEventAutoConfiguration.java +++ b/ballcat-starters/ballcat-spring-boot-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/RedisKeyEventAutoConfiguration.java @@ -1,12 +1,11 @@ package com.hccake.ballcat.autoconfigure.redis; import com.hccake.ballcat.common.redis.config.CacheProperties; -import com.hccake.ballcat.common.redis.keyevent.listener.DefaultDeletedKeyEventMessageListener; -import com.hccake.ballcat.common.redis.keyevent.listener.DefaultExpiredKeyEventMessageListener; -import com.hccake.ballcat.common.redis.keyevent.listener.DefaultSetKeyEventMessageListener; -import com.hccake.ballcat.common.redis.keyevent.listener.AbstractDeletedKeyEventMessageListener; -import com.hccake.ballcat.common.redis.keyevent.listener.AbstractExpiredKeyEventMessageListener; -import com.hccake.ballcat.common.redis.keyevent.listener.AbstractSetKeyEventMessageListener; +import com.hccake.ballcat.common.redis.keyevent.listener.*; +import com.hccake.ballcat.common.redis.keyevent.template.KeyDeletedEventMessageTemplate; +import com.hccake.ballcat.common.redis.keyevent.template.KeyExpiredEventMessageTemplate; +import com.hccake.ballcat.common.redis.keyevent.template.KeySetEventMessageTemplate; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -15,6 +14,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import java.util.List; + /** * redis key event auto configuration * @@ -56,8 +57,9 @@ public class RedisKeyEventAutoConfiguration { @Bean(name = LISTENER_NAME) @ConditionalOnMissingBean(name = LISTENER_NAME) public AbstractDeletedKeyEventMessageListener keyDeletedEventMessageListener( - @Qualifier(value = CONTAINER_NAME) RedisMessageListenerContainer listenerContainer) { - return new DefaultDeletedKeyEventMessageListener(listenerContainer); + @Qualifier(value = CONTAINER_NAME) RedisMessageListenerContainer listenerContainer, + ObjectProvider> objectProvider) { + return new DefaultDeletedKeyEventMessageListener(listenerContainer, objectProvider); } } @@ -80,8 +82,9 @@ public class RedisKeyEventAutoConfiguration { @Bean(name = LISTENER_NAME) @ConditionalOnMissingBean(name = LISTENER_NAME) public AbstractSetKeyEventMessageListener keySetEventMessageListener( - @Qualifier(value = CONTAINER_NAME) RedisMessageListenerContainer listenerContainer) { - return new DefaultSetKeyEventMessageListener(listenerContainer); + @Qualifier(value = CONTAINER_NAME) RedisMessageListenerContainer listenerContainer, + ObjectProvider> objectProvider) { + return new DefaultSetKeyEventMessageListener(listenerContainer, objectProvider); } } @@ -104,8 +107,9 @@ public class RedisKeyEventAutoConfiguration { @Bean(name = LISTENER_NAME) @ConditionalOnMissingBean(name = LISTENER_NAME) public AbstractExpiredKeyEventMessageListener keyExpiredEventMessageListener( - @Qualifier(value = CONTAINER_NAME) RedisMessageListenerContainer listenerContainer) { - return new DefaultExpiredKeyEventMessageListener(listenerContainer); + @Qualifier(value = CONTAINER_NAME) RedisMessageListenerContainer listenerContainer, + ObjectProvider> objectProvider) { + return new DefaultExpiredKeyEventMessageListener(listenerContainer, objectProvider); } }