无法将 DEFAULT_STREAMS_CONFIG_BEAN_NAME 标记为主要
Cannot mark DEFAULT_STREAMS_CONFIG_BEAN_NAME as Primary
我刚刚升级到 spring-boot 2.1.3.RELEASE 并且由于这个新的 class/ 方法(kafkaStreamsFactoryBeanConfigurer
完全需要一个 factoryBean
):
@Configuration
@ConditionalOnClass(StreamsBuilder.class)
@ConditionalOnBean(name =
KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_BUILDER_BEAN_NAME)
class KafkaStreamsAnnotationDrivenConfiguration {
//...
@Bean
public KafkaStreamsFactoryBeanConfigurer kafkaStreamsFactoryBeanConfigurer(
StreamsBuilderFactoryBean factoryBean) {
return new KafkaStreamsFactoryBeanConfigurer(this.properties, factoryBean);
}
}
我收到这个错误:
Parameter 0 of method kafkaStreamsFactoryBeanConfigurer in org.springframework.boot.autoconfigure.kafka.KafkaStreamsAnnotationDrivenConfiguration required a single bean, but 2 were found:
- &defaultKafkaStreamsBuilder: defined by method 'defaultKafkaStreamsBuilder' in class path resource [com/elsevier/q2c/transaction/snapshot/builder/config/KafkaStreamsConfig.class]
- &snapshotKafkaStreamsBuilder: defined by method 'snapshotKafkaStreamsBuilder' in class path resource [com/elsevier/q2c/transaction/snapshot/builder/config/KafkaStreamsConfig.class]
我希望通过将两个 StreamsBuilderFactoryBean 中的一个标记为 @Primary
(建议 )来解决这个问题。但即使我这样做:
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_BUILDER_BEAN_NAME)
@Primary
public StreamsBuilderFactoryBean defaultKafkaStreamsBuilder(
@Qualifier(KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME) KafkaStreamsConfiguration streamsConfiguration) {
StreamsBuilderFactoryBean streamsBuilderFactoryBean = new StreamsBuilderFactoryBean(streamsConfiguration);
return streamsBuilderFactoryBean;
}
@Bean(name = SNAPSHOT_STREAMS_BUILDER_BEAN_NAME)
public StreamsBuilderFactoryBean snapshotKafkaStreamsBuilder(
@Qualifier(SNAPSHOT_STREAMS_CONFIG_BEAN_NAME) KafkaStreamsConfiguration streamsConfiguration) {
StreamsBuilderFactoryBean streamsBuilderFactoryBean = new StreamsBuilderFactoryBean(streamsConfiguration);
return streamsBuilderFactoryBean;
}
我仍然得到完全相同的错误。
我在想,也许 @Primary
使构造的 bean 成为主要的。非常感谢任何帮助!
编辑:我通过删除 @EnableKafkaStreams
和 DEFAULT_STREAMS_BUILDER_BEAN_NAME
绕过了这个问题。结果,KafkaStreamsFactoryBeanConfigurer
没有启动。
我不确定为什么 @Primary
不起作用。我开了一个GitHub issue.
在我的例子中,我通过删除@EnableKafkaStreams(即没有自动创建流 bean)来规避这个问题,并且我手动创建了所有需要的流 bean。如果您有多个流,那么看起来会更好,因为命名也可能更具破坏性。
我刚刚升级到 spring-boot 2.1.3.RELEASE 并且由于这个新的 class/ 方法(kafkaStreamsFactoryBeanConfigurer
完全需要一个 factoryBean
):
@Configuration
@ConditionalOnClass(StreamsBuilder.class)
@ConditionalOnBean(name =
KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_BUILDER_BEAN_NAME)
class KafkaStreamsAnnotationDrivenConfiguration {
//...
@Bean
public KafkaStreamsFactoryBeanConfigurer kafkaStreamsFactoryBeanConfigurer(
StreamsBuilderFactoryBean factoryBean) {
return new KafkaStreamsFactoryBeanConfigurer(this.properties, factoryBean);
}
}
我收到这个错误:
Parameter 0 of method kafkaStreamsFactoryBeanConfigurer in org.springframework.boot.autoconfigure.kafka.KafkaStreamsAnnotationDrivenConfiguration required a single bean, but 2 were found:
- &defaultKafkaStreamsBuilder: defined by method 'defaultKafkaStreamsBuilder' in class path resource [com/elsevier/q2c/transaction/snapshot/builder/config/KafkaStreamsConfig.class]
- &snapshotKafkaStreamsBuilder: defined by method 'snapshotKafkaStreamsBuilder' in class path resource [com/elsevier/q2c/transaction/snapshot/builder/config/KafkaStreamsConfig.class]
我希望通过将两个 StreamsBuilderFactoryBean 中的一个标记为 @Primary
(建议
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_BUILDER_BEAN_NAME)
@Primary
public StreamsBuilderFactoryBean defaultKafkaStreamsBuilder(
@Qualifier(KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME) KafkaStreamsConfiguration streamsConfiguration) {
StreamsBuilderFactoryBean streamsBuilderFactoryBean = new StreamsBuilderFactoryBean(streamsConfiguration);
return streamsBuilderFactoryBean;
}
@Bean(name = SNAPSHOT_STREAMS_BUILDER_BEAN_NAME)
public StreamsBuilderFactoryBean snapshotKafkaStreamsBuilder(
@Qualifier(SNAPSHOT_STREAMS_CONFIG_BEAN_NAME) KafkaStreamsConfiguration streamsConfiguration) {
StreamsBuilderFactoryBean streamsBuilderFactoryBean = new StreamsBuilderFactoryBean(streamsConfiguration);
return streamsBuilderFactoryBean;
}
我仍然得到完全相同的错误。
我在想,也许 @Primary
使构造的 bean 成为主要的。非常感谢任何帮助!
编辑:我通过删除 @EnableKafkaStreams
和 DEFAULT_STREAMS_BUILDER_BEAN_NAME
绕过了这个问题。结果,KafkaStreamsFactoryBeanConfigurer
没有启动。
我不确定为什么 @Primary
不起作用。我开了一个GitHub issue.
在我的例子中,我通过删除@EnableKafkaStreams(即没有自动创建流 bean)来规避这个问题,并且我手动创建了所有需要的流 bean。如果您有多个流,那么看起来会更好,因为命名也可能更具破坏性。