调整 AddMessageEventListenerToContainer 的注册方式,防止用户配置包扫描导致的加载顺序异常

This commit is contained in:
b2baccline
2021-09-26 22:24:06 +08:00
parent 5b8ad5d194
commit ad1319119e
2 changed files with 34 additions and 25 deletions

View File

@@ -0,0 +1,32 @@
package com.hccake.ballcat.autoconfigure.redis;
import com.hccake.ballcat.common.redis.listener.MessageEventListener;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* @author hccake
*/
@RequiredArgsConstructor
public class AddMessageEventListenerToContainer {
private final RedisMessageListenerContainer listenerContainer;
private final List<MessageEventListener> listenerList;
/**
* 将所有的 <code>MessageEventListener<code/> 注册到
* <code>RedisMessageListenerContainer<code/> 中
*/
@PostConstruct
public void addMessageListener() {
// 注册监听器
for (MessageEventListener messageEventListener : listenerList) {
listenerContainer.addMessageListener(messageEventListener, messageEventListener.topic());
}
}
}

View File

@@ -6,15 +6,14 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* @author hccake
*/
@Import(AddMessageEventListenerToContainer.class)
@ConditionalOnBean(MessageEventListener.class)
@Configuration(proxyBeanMethods = false)
@RequiredArgsConstructor
@@ -28,26 +27,4 @@ public class MessageEventListenerAutoConfiguration {
return container;
}
@Configuration(proxyBeanMethods = false)
@RequiredArgsConstructor
static class AddMessageEventListenerToContainer {
private final RedisMessageListenerContainer listenerContainer;
private final List<MessageEventListener> listenerList;
/**
* 将所有的 <code>MessageEventListener<code/> 注册到
* <code>RedisMessageListenerContainer<code/> 中
*/
@PostConstruct
public void addMessageListener() {
// 注册监听器
for (MessageEventListener messageEventListener : listenerList) {
listenerContainer.addMessageListener(messageEventListener, messageEventListener.topic());
}
}
}
}