From a87aa74a3af27960276ed02f4273386d25d2a231 Mon Sep 17 00:00:00 2001 From: duxinglangzi <871364441@qq.com> Date: 星期五, 24 六月 2022 15:41:11 +0800 Subject: [PATCH] 支持动态参数配置 --- src/main/java/com/duxinglangzi/canal/starter/configuration/CanalListenerAnnotationBeanPostProcessor.java | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/duxinglangzi/canal/starter/configuration/CanalListenerAnnotationBeanPostProcessor.java b/src/main/java/com/duxinglangzi/canal/starter/configuration/CanalListenerAnnotationBeanPostProcessor.java index 02d401e..64915e4 100644 --- a/src/main/java/com/duxinglangzi/canal/starter/configuration/CanalListenerAnnotationBeanPostProcessor.java +++ b/src/main/java/com/duxinglangzi/canal/starter/configuration/CanalListenerAnnotationBeanPostProcessor.java @@ -11,6 +11,8 @@ import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.core.MethodIntrospector; import org.springframework.core.annotation.AnnotatedElementUtils; @@ -25,7 +27,7 @@ * @author wuqiong 2022/4/11 */ public class CanalListenerAnnotationBeanPostProcessor implements - BeanPostProcessor, SmartInitializingSingleton, BeanFactoryPostProcessor { + BeanPostProcessor, SmartInitializingSingleton, BeanFactoryPostProcessor, ApplicationContextAware { private static final Logger logger = LoggerFactory.getLogger(CanalListenerAnnotationBeanPostProcessor.class); @@ -33,6 +35,7 @@ private Set<CanalListenerEndpointRegistrar> registrars = Collections.newSetFromMap(new ConcurrentHashMap<>()); private ConfigurableListableBeanFactory configurableListableBeanFactory; private CanalAutoConfigurationProperties canalAutoConfigurationProperties; + private ApplicationContext applicationContext; @Override public Object postProcessAfterInitialization(final Object bean, final String beanName) throws BeansException { @@ -47,7 +50,7 @@ // 鍏堝姞鍏ュ埌寰呮敞鍐岄噷闈� annotatedMethods.entrySet().stream() .filter(e -> e != null) - .forEach(ele -> registrars.add(new CanalListenerEndpointRegistrar(bean, ele))); + .forEach(ele -> registrars.add(createRegistrar(bean, ele))); logger.info("Registered @CanalListener methods processed on bean:{} , Methods :{} ", beanName, annotatedMethods.keySet().stream().map(e -> e.getName()).collect(Collectors.toSet())); } @@ -71,5 +74,15 @@ this.configurableListableBeanFactory = configurableListableBeanFactory; } + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + private CanalListenerEndpointRegistrar createRegistrar(Object bean, Map.Entry<Method, CanalListener> entry) { + return new CanalListenerEndpointRegistrar(bean, entry.getKey(), + applicationContext.getEnvironment().resolvePlaceholders(entry.getValue().destination()), + applicationContext.getEnvironment().resolvePlaceholders(entry.getValue().database()), + entry.getValue().table(), entry.getValue().eventType()); + } } -- Gitblit v1.8.0