servers?

nkhmeac6  于 2021-07-23  发布在  Java
关注(0)|答案(2)|浏览(250)

当前我的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?
提前谢谢。

x3naxklr

x3naxklr1#

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

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

bwleehnv

bwleehnv2#

Spring Boot允许从不同的地方加载属性。从命令行可以使用 java -jar myapp.jar --spring.kafka.bootstrap.servers=... 如果愿意,可以通过ide传递相同的参数
另一种可能是定义一个环境变量,这样spring boot将读取这个变量,并覆盖 application.properties 文件。当涉及到配置时,all-in-all-spring boot提供了相当高级的选项,因此我建议阅读[spring boot文档的这一章]来描述它们

相关问题