@KafkaListener 属性の変更

バージョン 2.7.2 以降、コンテナーが作成される前に、プログラムでアノテーション属性を変更できるようになりました。これを行うには、1 つ以上の 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;
    };
}