【发布时间】:2021-06-28 03:23:44
【问题描述】:
我使用TestContainers 进行集成测试,我使用@DynamicPropertySource 设置KafkaContainer 引导服务器,如下所示:
@DynamicPropertySource
static void kafkaProperties(DynamicPropertyRegistry registry) {
registry.add("spring.kafka.bootstrap-servers", () -> {
return kafkaContainer1.getHost() + ":" + kafkaContainer1.getFirstMappedPort();
});
}
这就像一个魅力,即在我的KafkaTopicConfiguration类中:
@Configuration
public class KafkaTopicConfiguration {
private String bootstrapServers;
public KafkaTopicConfiguration(@Value("${spring.kafka.bootstrap-servers}") String bootstrapServers) {
this.bootstrapServers = bootstrapServers;
}
其中bootstrapServers会得到Docker暴露在宿主机上的KafkaContainer的地址。
现在,我添加了一个空构造函数,因为我想解决一些问题,如下所示:
public KafkaTopicConfiguration() {
System.out.println("In KafkaTopicConfiguration constructor");
}
突然boostrapServers 值变成null。当我删除空构造函数时,它恢复正常。有谁知道为什么?谢谢。
【问题讨论】:
-
所以你删除了对字段的赋值,发现它是
null? -
@M.Deinum 是什么意思?请解释一下,谢谢!
-
正如我所说的那样。在构造函数中,您传入一个参数并将其分配给一个字段。您删除它并仍然期望分配发生,这不是事情的运作方式。
-
嗨@M.Deinum,你误会了。我为故障排除添加的构造函数是这样的:
public KafkaTopicConfiguration(). -
我没有误会什么。是你不理解事物。您添加了一个没有分配任何内容的构造函数,并想知道为什么字段为空。使用无参数构造函数而不是其他构造函数,因此不会将任何内容分配给该字段。
标签: spring testcontainers