Время от времени значение «spring.cloud.stream.kafka.binder.brokers» не разрешается, даже если установлено

#java #spring #spring-boot #apache-kafka #spring-cloud

Вопрос:

У меня есть абстрактный класс, цель которого-хранить конфигурации для запуска тестов Кафки.

 @TestPropertySource(properties = {
"spring.cloud.stream.kafka.binder.brokers=${spring.embedded.kafka.brokers}",
"spring.cloud.stream.kafka.binder.configuration.metadata.max.age.ms=150",
"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}",
"spring.kafka.consumer.enable-auto-commit=true",
"spring.kafka.consumer.auto-offset-reset=earliest",
"spring.autoconfigure.exclude=org.springframework.cloud.stream.test.binder.TestSupportBinderAutoConfiguration",
"spring.cloud.stream.kafka.binder.auto-create-topics=true"}
)
@EmbeddedKafka(
  partitions = 1,
  controlledShutdown = true,
  brokerProperties = {"auto.create.topics.enable=true"}
)
@DirtiesContext
public abstract class KafkaCongig {...}

 

тогда есть несколько классов, расширяющих этот:

 @SpringBootTest(classes = {...})
@TestPropertySource(properties = {
    "spring.main.allow-bean-definition-overriding=true"})
@ActiveProfiles("test")
public class ClassA extends KafkaCongig {
 

Тесты по большей части работают нормально, но иногда возникают проблемы с перезаписью spring.cloud.stream.kafka.binder.brokers значения, так или иначе, и оно будет получать значение application-test.yaml вместо перезаписи. И это ofc приводит к сбою тестов, некоторые из них, как и все остальные, могут получить правильное значение. Не уверен, в чем здесь причина, не уверен, почему это может сработать 5 раз подряд только для того, чтобы потерпеть неудачу с 6-й попытки.

РЕДАКТИРОВАТЬ: Если значение в yaml имеет заполнитель ${spring.embedded.kafka.brokers} , то это заполнитель, который будет отображаться в журналах для адреса брокера.

EDIT2: Он всегда терпит неудачу при выполнении тестов первого класса. Я прокомментировал это и узнал, что теперь «новый» первый класс терпит неудачу.