在Spring Boot中,如何加载kafka.通过命令行引导服务器?



目前我的kafka服务器id通过应用程序加载。属性文件。但是我想通过命令行传递,这样当程序启动时,我可以传递服务器id。

现在我的程序运行良好。但是如果我想在未来改变服务器id,那么在这种情况下,我需要再次构建项目,因为我在属性文件中提到了服务器id,而不是通过命令行传递。

我的项目是用Java开发的。

我apprication.properties

#Kafka Config
spring.kafka.bootstrap-servers = ***.***.1.160:9092

ConsumerConfig

@Configuration
public class KafkaConsumerConfig {
@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
props.put(ConsumerConfig.FETCH_MIN_BYTES_CONFIG, 0);
return props;
}
@Bean
public ConsumerFactory<String, String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
如何通过命令行传递server-id ?

提前感谢。

Spring boot允许从不同位置加载属性。从命令行可以使用java -jar myapp.jar --spring.kafka.bootstrap.servers=...

如果您愿意,可以在IDE中传递相同的参数

另一种可能性是定义一个环境变量,以便spring引导将读取该变量,并且它将覆盖application.properties文件中属性定义的默认值。总而言之,当涉及到配置时,spring引导提供了相当高级的选项,因此我建议阅读[spring引导文档的这一章],其中描述了所有这些选项1

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.kafka.bootstrap-servers=localhost:9092

或添加到IDE的运行对话框

最新更新