【问题标题】:In Spring Boot, How can we load kafka.bootstrap-servers through command line?在 Spring Boot 中,我们如何通过命令行加载 kafka.bootstrap-servers?
【发布时间】:2021-04-22 17:56:55
【问题描述】:

目前我的 kafka 服务器 ID 通过 application.properties 文件加载。但我想通过命令行,这样当程序启动时,我可以通过 server-id。

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

我的项目使用 Spring Boot 用 Ja​​va 开发。

我的 apprication.properties

#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;
    }
}

如何通过命令行传递 server-id ?

提前致谢。

【问题讨论】:

    标签: java spring spring-boot command-line command-line-arguments


    【解决方案1】:
    mvn spring-boot:run -Dspring-boot.run.arguments=--spring.kafka.bootstrap-servers=localhost:9092
    

    或将其添加到 IDE 的运行对话框中

    【讨论】:

    • 得到无法解析占位符 'spring.kafka.bootstrap-servers' in value "${spring.kafka.bootstrap-servers}" 代码后的错误。
    【解决方案2】:

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

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

    另一种可能是定义一个环境变量,这样spring boot会读取这个变量,它会覆盖application.properties文件中的属性defind的默认值。 总而言之,spring boot 在配置方面提供了相当高级的选项,所以我建议阅读所有描述它们的[spring boot 文档的这一章]1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2018-10-26
      相关资源
      最近更新 更多