当前我的kafka服务器id通过application.properties文件加载。但我想通过命令行,这样当程序启动时,我就可以通过server-id。
现在我的程序很好。但如果我想在将来更改服务器id,那么在这种情况下,我需要再次构建项目,因为我在属性文件中提到了服务器id,而不是通过命令行。
我的项目是用java和springboot开发的。
我的财产
# Kafka Config
spring.kafka.bootstrap-servers =***.***.1.160:9092
消费者配置
@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;
}
}
如何通过命令行传递服务器id?
提前谢谢。
2条答案
按热度按时间x3naxklr1#
或者将其添加到ide的运行对话框中
bwleehnv2#
Spring Boot允许从不同的地方加载属性。从命令行可以使用
java -jar myapp.jar --spring.kafka.bootstrap.servers=...
如果愿意,可以通过ide传递相同的参数另一种可能是定义一个环境变量,这样spring boot将读取这个变量,并覆盖
application.properties
文件。当涉及到配置时,all-in-all-spring boot提供了相当高级的选项,因此我建议阅读[spring boot文档的这一章]来描述它们