我面临一个问题,即我的 KafkaProducerConfig
获得无效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
最终将ProducerConfig
通过一些底层自动配置提供给 Kafka。
有趣的是,embeddedKafkaBrokers
测试类中的实例字段确实包含嵌入式 kafka 设置的代理 IP。
我已经得出结论,属性源加载顺序存在问题,@EmbeddedKafka
没有及时设置代理 IP 系统属性kafkaTestProperties.properties
以解决它。这个问题是在将我们的代码库移植到 Spring Boot 2 和 Spring Cloud Finchley SR2 后出现的,其中 Spring Kafka API 已经升级。
我试过删除@SpringBootTest
和包装test()
代码SpringApplicationBuilder
无济于事。
关于如何解决这个问题的任何建议?也许我可以利用@AutoConfigurationAfter
或@Order
?有没有办法命令加载属性源?