spring@dynamicpropertysource将不起作用

rsaldnfx  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(377)

我正在使用 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在主机上暴露的Kafka容器的地址。现在,我添加了一个空构造函数,因为我想解决一些问题,比如:

public KafkaTopicConfiguration() {
    System.out.println("In KafkaTopicConfiguration constructor");
}

突然间 boostrapServers 价值变成 null . 当我移除空构造函数时,它就恢复正常了。有人知道为什么吗?谢谢。

mxg2im7a

mxg2im7a1#

谢谢@m.deinum指出我的错误。为了子孙后代,我应该加上 @Autowired 注解,告诉spring使用哪个构造函数:

@Autowired
public KafkaTopicConfiguration(@Value("${spring.kafka.bootstrap-servers}") String bootstrapServers) {
    this.bootstrapServers = bootstrapServers;
}

public KafkaTopicConfiguration() {
    System.out.println("In KafkaTopicConfiguration constructor");
}

不过,我的另一个构造函数是没有用的,我应该在现有的1-arg构造函数上添加sysout;-)

相关问题