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}").

ссылка на документацию

Другие вопросы по тегам