IP-адрес встроенного Kafka Broker не разрешен в файле свойств - PullRequest
0 голосов
/ 06 марта 2019

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

1 Ответ

0 голосов
/ 06 марта 2019

Похоже, что ваш заполнитель недействителен. Попробуйте заменить:

embedded-kafka-brokers=${"spring.embedded.kafka.brokers"}

с:

embedded-kafka-brokers=${spring.embedded.kafka.brokers}

и предоставьте его производителю, используя класс с @ConfigurationProperties или используя @Value ("$ {embedded-kafka-brokers}").

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

...