spring boot 集成 superdiamond

本文介绍如何在SpringBoot项目中使用Superdiamond进行配置管理,并调整其优先级,使其位于环境变量和JVM属性之下,但高于application.properties。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring boot用spring新的 Enviroment 类来管理属性配置。Super diamond (https://github.com/melin/super-diamond) 默认给的是用 以下配置

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="properties" ref="propertiesConfiguration" />
</bean>

<bean id="propertiesConfiguration" class="com.github.diamond.client.PropertiesConfigurationFactoryBean">
    <constructor-arg index="0" value="localhost" />
    <constructor-arg index="1" value="5001" />
    <constructor-arg index="2" value="test" />
    <constructor-arg index="3" value="development" />
</bean>

这样的配置导致superdiamond的配置信息是优先级最低,不能起到集中管理,覆盖打包到jar中的application.properties的目的。如果设置PropertySourcesPlaceHoderConfigurer 的  localOverride = true 的话,那么superdiamond的优先级又太高。总之我希望superdiamond的配置优先级要低于环境变量和jvm properties,但是要高于application properties。那就不要用PropertySourcesPlaceHoderConfigurer了,直接把propertie插入到Enviroment里面就好了。

SpringApplication app = new SpringApplication(Application.class);
    app.addInitializers((ApplicationContextInitializer<ConfigurableApplicationContext>) applicationContext -> {
        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        if (Arrays.stream(environment.getActiveProfiles())
                .filter(x -> "superdiamond".equals(x)).findAny().isPresent()) {
            try {
                loadSuperDiamond(environment);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    app.run(args);
}

static void loadSuperDiamond(ConfigurableEnvironment enviroment) throws Exception {
    PropertiesConfigurationFactoryBean propertiesConfigurationFactoryBean = new PropertiesConfigurationFactoryBean(
            enviroment.getProperty("superdiamond.host"),
            Integer.parseInt(enviroment.getProperty("superdiamond.port")),
            enviroment.getProperty("superdiamond.proj", "superdiamond.proj"),
            enviroment.getProperty("superdiamond.profile", "superdiamond.profile"),
            enviroment.getProperty("superdiamond.modules", "superdiamond.modules")
    );
    Properties properties = propertiesConfigurationFactoryBean.getObject();
    enviroment.getPropertySources().addAfter("random", new PropertiesPropertySource("superdiamond", properties));
}


转载于:https://my.oschina.net/komodo/blog/669872

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值