@KafkaListener
属性修改
从版本 2.7.2 开始,现在可以在创建容器之前以编程方式修改注解属性。为此,可以将一个或多个 KafkaListenerAnnotationBeanPostProcessor.AnnotationEnhancer
添加到应用上下文中。AnnotationEnhancer
是一个 BiFunction<Map<String, Object>, AnnotatedElement, Map<String, Object>
,必须返回一个属性映射。属性值可以包含 SpEL 和/或属性占位符;增强器会在任何解析执行之前被调用。如果存在多个增强器并且它们实现了 Ordered
接口,则会按顺序调用它们。
AnnotationEnhancer bean 定义必须声明为 static ,因为它们在应用上下文生命周期的非常早期阶段就需要。 |
示例如下
@Bean
public static AnnotationEnhancer groupIdEnhancer() {
return (attrs, element) -> {
attrs.put("groupId", attrs.get("id") + "." + (element instanceof Class
? ((Class<?>) element).getSimpleName()
: ((Method) element).getDeclaringClass().getSimpleName()
+ "." + ((Method) element).getName()));
return attrs;
};
}