spring - 嵌入式 Kafka 代理 IP 未在属性文件中解析
问题描述
我面临一个问题,即我的 KafkaProducerConfig
获得无效bootstrap.servers
值,因为我的单元测试@PropertySource
没有解析该spring.embedded.kafka.brokers
属性。当我将生产者配置转储到日志时,我得到以下信息:
acks = 0
batch.size = 10000
bootstrap.servers = [${spring.embedded.kafka.brokers}]
...
显然,该属性没有得到解决。假设我有以下嵌入式 Kafka 测试。
@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
通过一些底层自动配置提供给 Kafka。
有趣的是,embeddedKafkaBrokers
测试类中的实例字段确实包含嵌入式 kafka 设置的代理 IP。
我已经得出结论,属性源加载顺序存在问题,@EmbeddedKafka
没有及时设置代理 IP 系统属性kafkaTestProperties.properties
以解决它。这个问题是在将我们的代码库移植到 Spring Boot 2 和 Spring Cloud Finchley SR2 后出现的,其中 Spring Kafka API 已经升级。
我试过删除@SpringBootTest
和包装test()
代码SpringApplicationBuilder
无济于事。
关于如何解决这个问题的任何建议?也许我可以利用@AutoConfigurationAfter
或@Order
?有没有办法命令加载属性源?
解决方案
看起来您的占位符无效。尝试替换:
embedded-kafka-brokers=${"spring.embedded.kafka.brokers"}
和:
embedded-kafka-brokers=${spring.embedded.kafka.brokers}
并使用带有@ConfigurationProperties 的类或使用@Value("${embedded-kafka-brokers}") 将其提供给生产者。
推荐阅读
- google-drive-api - 文件似乎已上传但未显示
- fusioncharts - FusionCharts 是否支持 x 轴的对数刻度?
- java - 我可以使用带有 Spring JMS 的 ObjectMessage 发送文件吗?
- python - 使用 Scrapy 的 ModuleNotFound 错误。未找到蜘蛛
- kubernetes - 如何在 Ready,SchedulingDisabled 中查找 k8s 节点的原因
- octave - GNU octave 是否有生成对角矩阵和交换矩阵的例程?
- c# - 导航到新页面后无法引用对象属性(C#、Xamarin)
- c# - 未加载符号,xamarin 项目上的 Visual Studio 或调试器有问题
- java - android api类的访问字段
- android-studio - 如何在片段之间进行多个数据?