【问题标题】:Embedded Kafka Broker IP Not Resolving in Property File嵌入式 Kafka 代理 IP 未在属性文件中解析
【发布时间】:2019-03-06 23:17:51
【问题描述】:

我遇到了一个问题,我的 Kafka ProducerConfig 得到一个无效的 bootstrap.servers 值,因为我的单元测试 @PropertySource 没有解析 spring.embedded.kafka.brokers 属性。当我将生产者配置转储到日志时,我得到以下信息:

acks = 0
batch.size = 10000
bootstrap.servers = [${spring.embedded.kafka.brokers}]
...

显然,该属性没有得到解决。假设我有以下嵌入式 Kafka 测试。

@EmbeddedKafka
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringRunner.class)
public class EmbeddedKafkaTest {

    @Value("${spring.embedded.kafka.brokers}")
    private String embeddedKafkaBrokers;

    @Test
    public void test(){}

    @SpringBootConfiguration
    @PropertySource("classpath:kafkaTestProps.properties")
    @EnableAutoConfiguration
    class EmbeddedKafkaTestConfiguration {
    }

}

而我的kafkaTestProperties.properties文件如下:

embedded-kafka-brokers=${spring.embedded.kafka.brokers}
...

embedded-kafka-brokers 最终将通过一些底层自动配置提供给 Kafka 的ProducerConfig

有趣的是,测试类中的 embeddedKafkaBrokers 实例字段确实包含嵌入式 kafka 设置的代理 IP。

我已经得出结论,属性源加载顺序存在问题,其中@EmbeddedKafka 没有及时设置代理 IP 系统属性,以便kafkaTestProperties.properties 解决它。在将我们的代码库移植到 Spring Kafka API 已升级的 Spring Boot 2 和 Spring Cloud Finchley SR2 后,出现了这个问题。

我尝试删除 @SpringBootTest 并将 test() 代码包装在 SpringApplicationBuilder 中,但无济于事。

关于如何解决此问题的任何建议?也许我可以利用@AutoConfigurationAfter@Order?有没有办法订购属性源的加载?

【问题讨论】:

    标签: spring spring-boot junit apache-kafka embedded-kafka


    【解决方案1】:

    您的占位符似乎无效。 尝试替换:

    embedded-kafka-brokers=${"spring.embedded.kafka.brokers"}

    与:

    embedded-kafka-brokers=${spring.embedded.kafka.brokers}

    并使用带有@ConfigurationProperties 的类或使用@Value("${embedded-kafka-brokers}") 将其提供给生产者。

    documentation link

    【讨论】:

    • 对不起,我的代码中实际上有未引用的版本。我已经更新了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多