Всякий раз, когда вы используете @EmbeddedKafka
в тестовых классах, вы можете сделать так:
static {
System.setProperty(EmbeddedKafkaBroker.BROKER_LIST_PROPERTY,
"spring.kafka.bootstrap-servers");
}
Таким образом, EmbeddedKafkaBroker
будет выставлять свой адрес со случайным портом непосредственно в spring.kafka.bootstrap-servers
. Поэтому вам не понадобится это изменение в application.yml
и не понадобится @EmbeddedKafka
в других классах.
UPDATE
OK! Не похоже, что вы полагаетесь на автоконфигурацию Spring Boot и ее обычные свойства.
Итак, чтобы SpringKafkaApplicationTest
работал, вам нужно иметь системное свойство, подобное этому:
static {
System.setProperty (EmbeddedKafkaBroker.BROKER_LIST_PROPERTY,
"kafka.bootstrap-серверы");
}
Вам вообще не нужно иметь это свойство kafka.bootstrap-servers
в application.yml
.
Проблема с SpringJmsApplicationTest
в том, что он полностью основан на @SpringBootTest
, который собирается загрузить ваш SpringApplication
всеми классами @Configuration
, которые есть во вложенных пакетах, включая KafkaReceiverConfig
и KafkaSenderConfig
. Я предполагаю, что вы хотели бы не иметь их в случае SpringJmsApplicationTest
. Таким образом, вы должны рассмотреть не загружать все приложение из вашего @SpringBootTest
.
Только быстрое решение, которое я вижу для ваших тестов, выглядит так:
@SpringBootTest(classes = { ActiveMqReceiverConfig.class, ActiveMqSenderConfig.class })
public class SpringJmsApplicationTest {
Полагаю, вы можете сделать то же самое для SpringKafkaApplicationTest
:
@SpringBootTest(classes = { KafkaReceiverConfig.class, KafkaSenderConfig.class })
@DirtiesContext
@EmbeddedKafka(partitions = 1,
topics = { SpringKafkaApplicationTest.HELLOWORLD_TOPIC })
public class SpringKafkaApplicationTest {