我遇到的问题是我的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
?有没有办法命令加载属性源?
答案 0 :(得分:0)
您的占位符似乎无效。 尝试更换:
embedded-kafka-brokers=${"spring.embedded.kafka.brokers"}
具有:
embedded-kafka-brokers=${spring.embedded.kafka.brokers}
并使用带有@ConfigurationProperties的类或@Value(“ $ {embedded-kafka-brokers}”)将其提供给生产者。