У меня проблема с тем, что мой Kafka 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
?Есть ли способ заказать загрузку источников собственности?