【发布时间】:2021-03-12 16:36:37
【问题描述】:
我正在使用KafkaContainer 进行集成测试;启动容器后,端口是随机选择的。
我可以通过container.getBootStrapServer() 获取端口,但我需要将动态主机+端口放在属性中(application-itest.yml,在spring.kafka.bootstrap-servers 下,因为这是 Spring Kafka 选择配置我的值的地方KafkaTemplate的bean)。
或者,如果我可以在启动KafkaContainer 时将端口设置为静态值,例如9999,并将其设置在 yaml 文件中,它也可以工作。我也不知道怎么做。(获取值后是否需要注入另一个KafkaTemplate的bean?)
如何启动 KafkaContainer:
public static final KafkaContainer kafka = new KafkaContainer(
DockerImageName.parse("confluentinc/cp-kafka:5.4.3")
);
private AdminClient adminClient;
...
@BeforeEach
void setup() {
if (adminClient == null) {
kafka.start();
// here value is dynamic and is not accessible in Environment; not as `@AutoConfigureWiremock`, I have `wiremock.server` value set after)
String bootStrapServer = kafka.getBootstrapServers();
log.info("Kafka container created at: {}", bootStrapServer);
adminClient = AdminClient.create(Map.of(
AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootStrapServer
));
// create my topic
log.info("Current topic: {}", topic);
adminClient.createTopics(Set.of(
new NewTopic(topic, 4, (short) 1)
));
}
}
【问题讨论】:
标签: spring-boot apache-kafka testcontainers