IP-адрес встроенного Kafka Broker не разрешен в файле свойств
Я столкнулся с проблемой, когда моя Кафка ProducerConfig
становится недействительным bootstrap.servers
значение, потому что мой юнит тест @PropertySource
не разрешает spring.embedded.kafka.brokers
имущество. Когда я записываю свою конфигурацию производителя в журналы, я получаю следующее:
acks = 0
batch.size = 10000
bootstrap.servers = [${spring.embedded.kafka.brokers}]
...
Понятно, что свойство не решается. Предположим, у меня есть следующий встроенный тест Кафки.
@EmbeddedKafka
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringRunner.class)
public class EmbeddedKafkaTest {
@Value("${spring.embedded.kafka.brokers}")
private String embeddedKafkaBrokers;
@Test
public void test(){}
@SpringBootConfiguration
@PropertySource("classpath:kafkaTestProps.properties")
@EnableAutoConfiguration
class EmbeddedKafkaTestConfiguration {
}
}
и мой kafkaTestProperties.properties
Файл выглядит следующим образом:
embedded-kafka-brokers=${spring.embedded.kafka.brokers}
...
embedded-kafka-brokers
в конечном итоге будет предоставлен Кафке ProducerConfig
через некоторую базовую автоконфигурацию.
Интересно, что embeddedKafkaBrokers
Поле экземпляра в тестовом классе содержит IP-адреса брокера, установленные встроенным kafka.
Я пришел к выводу, что есть проблема с порядком загрузки источника свойства, где @EmbeddedKafka
не устанавливает свойство системы IP брокера вовремя kafkaTestProperties.properties
решить это. Эта проблема возникла после переноса нашей кодовой базы в Spring Boot 2 и Spring Cloud Finchley SR2, где были обновлены API Spring Kafka.
Я пытался удалить @SpringBootTest
и упаковка test()
код в SpringApplicationBuilder
но безрезультатно.
Любой совет, как я могу это исправить? Возможно, я могу использовать @AutoConfigurationAfter
или же @Order
? Есть ли способ заказать загрузку источников собственности?
1 ответ
Похоже, что ваш заполнитель недействителен. Попробуйте заменить:
embedded-kafka-brokers=${"spring.embedded.kafka.brokers"}
с:
embedded-kafka-brokers=${spring.embedded.kafka.brokers}
и предоставьте его производителю, используя класс с @ConfigurationProperties или @Value("${embedded-kafka-brokers}").