Встроенный Kafka Appender не работает с Log4j2 xml
Я хочу написать модульный тест для Kafka Appender, используя log4j2 xml. Я использую встроенный kafka, но он не может инициализировать ${spring.embedded.kafka.brokers} это свойство.
Я получаю эту ошибку
java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:96)
... 17 more
Caused by: org.apache.kafka.common.config.ConfigException: Invalid url in bootstrap.servers: ${spring.embedded.kafka.brokers}
at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:51)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:406)
... 38 more
Log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
<Properties>
<Property name="bootstrapServers">${bundle:application:kafka.bootstrap-servers}</Property>
<Property name="securityProtocol">${bundle:application:kafka.security.protocol}</Property>
</Properties>
<Appenders>
<Kafka name="kafkaAppender" topic="ERROR_TOPIC_DEV">
<Filters>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" />
</Filters>
<JSONLayout />
<Property name="bootstrap.servers">${bootstrapServers}</Property>
<Property name="security.protocol">${securityProtocol}</Property>
</Kafka>
<Console name="consoleAppender" target="SYSTEM_OUT">
<Filters>
<ThresholdFilter level="INFO" onMatch="ACCEPT" />
</Filters>
<JSONLayout/>
</Console>
</Appenders>
<Loggers>
<Root level="Info">
<AppenderRef ref="kafkaAppender"/>
<AppenderRef ref="consoleAppender"/>
</Root>
<Logger name="org.apache.kafka" level="Info" />
</Loggers>
</Configuration>
application.properties
kafka.bootstrap-servers=${spring.embedded.kafka.brokers}
kafka.security.protocol=PLAINTEXT
Выше я пытаюсь получить bootstrapServers из application.properties, но он не может инициализировать ${spring.embedded.kafka.brokers} это свойство. С другой стороны, я получаю значение для securityProtocol, потому что это строка. Заранее спасибо.