文档章节

在非spring boot程序中, 使用spring cloud config client

B
 BlueWoods
发布于 2016/09/26 13:42
字数 351
阅读 413
收藏 4

spring cloud config可以集中管理配置文件,不同的(spring-boot)应用程序,通过简单的配置就可以像使用; 但是普通的spring web application要使用config client却要费一番周折;

参考: https://github.com/spring-cloud/spring-cloud-config/issues/299

重点:

Well the "normal" way is to use Spring Cloud Config as part of a Spring Boot app. You really should consider doing that at some point.

If you want to try and cobble it together yourself you need a ConfigServicePropertySourceLocatorand you need to apply it to the Environment before the application context is started. How you do that will depend a lot on how you are creating the ApplicationContext (SpringApplication from Spring Boot would be much easier than whatever you are doing probably).

 

我们是一个spring web application,下面的方法也只是对web app有效;

1. maven 加入spring cloud config client:

 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
            <version>1.2.0.RELEASE</version>
        </dependency>

2. 配置web.xml, 让spring context loader 使用定制过的context;

    <context-param>
        <param-name>contextClass</param-name>
        <param-value>com.me.MyConfigurableWebApplicationContext</param-value>
    </context-param>

3. 实现 MyConfigurableWebApplicationContext, 主要的作用是使用自定义的environment;

public class MyConfigurableWebApplicationContext extends XmlWebApplicationContext {


    @Override
    protected ConfigurableEnvironment createEnvironment() {
        return new CloudEnvironment();
    }
}

4. 实现CloundEnvironment


public class CloudEnvironment extends StandardServletEnvironment {

    @Override
    protected void customizePropertySources(MutablePropertySources propertySources) {
        super.customizePropertySources(propertySources);
        try {
            propertySources.addLast(initConfigServicePropertySourceLocator(this));
        } catch (Exception ex) {
            logger.warn("failed to initialize cloud config environment", ex);
        }
    }

    private PropertySource<?> initConfigServicePropertySourceLocator(Environment environment) {
        ConfigClientProperties configClientProperties = new ConfigClientProperties(environment);
        configClientProperties.setUri("http://localhost:8888");
        configClientProperties.setName("myapp");
        configClientProperties.setLabel("master");
        ConfigServicePropertySourceLocator configServicePropertySourceLocator =
            new ConfigServicePropertySourceLocator(configClientProperties);
        return configServicePropertySourceLocator.locate(environment);
    }

}

5. 测试, 在server端配置cloud.config=true, 如果有效,那么这里应该能够得到true;


    @Value("${cloud.config: false}")
    public void setCloudConfig(boolean cloudConfig) {
        this.cloudConfig = cloudConfig;
    }

 

© 著作权归作者所有

共有 人打赏支持
B
粉丝 4
博文 39
码字总数 21286
作品 0
杭州
私信 提问
加载中

评论(1)

鼯鼠
鼯鼠
感谢楼主的慷慨分享,对我非常有用。有一点我补充一下,由于所有配置参数已经加载到Environment中,后面的@Value 注入时 ,x.y.z命名方式的配置必须要用 SPEL表达式来获取,如:@Value("#{environment['x.y.z']}")
跟上时代学Springcloud之介绍(1)

1、概念 Springboot是一个快速开发框架,那Springcloud就是多个springboot框架的有序集合,基本和dubbo的功能差不多。 2、版本号 每一个Springcloud的版本号都对应一个Springboot的版本,至关...

木九天
2018/12/29
0
0
史上最简单的 SpringCloud 教程 | 终章

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70148833 转载请标明出处...

方志朋
2017/04/12
0
0
5. 分布式配置中心客户端(测试) springcloud-config-client-test

建立空的子项目 springcloud-config-server 2. 修改 pom.xml 增加 修改后的 pom.xml 如下 3. 添加启动类 com.xnx3.springcloud.config.client.test.ConfigClientApplication 4. 添加类 com.......

鬼画符
2018/04/24
0
0
这些优秀的 Spring Cloud 开源软件,你知道几个?

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用...

技术小能手
2018/08/30
0
0
SpringCloud实战7-Config分布式配置管理

分布式环境下的统一配置框架,已经有不少了,比如百度的disconf,阿里的diamand 官方文档对spring Cloud Config的描述如下:   Spring Cloud Config为分布式系统中的外部配置提供服务器和客...

狂小白
2018/05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
今天
7
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
今天
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
今天
4
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
今天
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部