springboot整合使用Apollo配置中心

传统配置文件的问题
在分布式应用中,比如像springcloud的微服务应用,随着业务模块的拆分越来越细,必然会导致配置文件越来越多,而且越来越复杂,一方面是带来了对于配置文件的集中管理不方便,而且对于开发人员来说,某个服务需要新增、修改自己的配置文件需要绕很大的圈子,修改完毕后,还需要审核,校验,权限,发布等一些列环节才能完成配置文件的操作,总体来说是比较麻烦的,

Apollo带来的方便
个人总结的话,就是使用apollo配置中心,对于所有开发人员来说,这里相当于是一个配置文件的公共大水池,不同的应用只需要通过配置不同的AppId,在各自的appId下面进行配置,如果你需要使用其他应用模块的配置文件,通过不同应用的Appid找到相应的key即可使用,非常方便,而且相对于传统的配置文件,有一个比较麻烦的问题是,一旦修改了配置文件,项目必须要重启才能生效,Apollo配置中心就很好的解决了这个小麻烦,新增完毕配置文件只需要一键发布,即可在程序中使用,不需要重启项目,下面就来说说具体的使用过程,

1、这里我先搭建了一个简单的springboot工程,首先需要在pom中导入依赖,

        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.3.0</version>
        </dependency>
 
2、在application.properties配置文件中添加如下两行配置,

#自定义的appid名称,区分不同的应用
app.id=app_congge_first
#eureka配置中心地址
apollo.meta=http://192.168.111.132:8080
 
3、Apollo提供了多种获取配置中心配置文件key/value的方式,这里我使用两种方式获取,
3-1 直接使用注解的方式导入,前提是你知道了key的名称,这样就可以像使用配置到本地的配置文件中那种方式直接通过@Value注解进行使用,为了演示方便,这里写了一个测试的controller,

    @Value("${image_url:default}")
    private String imgUrlValue;
    
    @Value("${app_address:default}")
    private String appAddressValue;
    
    @ResponseBody
    @RequestMapping("/getConfigByApollo1")
    public String getConfigByApollo1(){
        return imgUrlValue;
    }
 
这里,我提前创建好了两个key/value对,注意当你建完一个key/value之后,必须要点击发布才能让配置生效,

在这里插入图片描述
启动项目,测试一下,http://localhost:8083/getConfigByApollo1,可以看到已经成功读取到配置文件的值,

在这里插入图片描述
3-2,Apollo还提供了相应的java的API用于读取配置文件,这里我们可以事先将相关的key存放到一个常量类,或者本地配置文件中,然后通过一个读取value的工具类直接进行读取即可,

/**
 * 存放所有的key
 * @author asus
 *
 */
public class KesConstants {
    
    public static String KEYS_IMG_URL = "image_url";
    
    public static String KEYS_IMG_APPADDRESS = "app_address";
}
 
读取key/value工具类,

/**
 * 阿波罗读取key
 * @author asus
 */
public class ApolloValueReadUtil {
    
    public static String getApolloValueByKey(String key){
        if(StringUtils.isBlank(key)){
            return null;
        }
        Config config = ConfigService.getAppConfig();
        String defaultValue = "default";
        return config.getProperty(key, defaultValue);
    }
    
}
 
然后我们在controller中测试一下,

    @ResponseBody
    @RequestMapping("/getConfigByApollo2")
    public String getConfigByApollo2(){
        return ApolloValueReadUtil.getApolloValueByKey(KesConstants.KEYS_IMG_APPADDRESS);
    }
 
浏览器输入,http://localhost:8083/getConfigByApollo2,可以看到也可以成功读取到配置文件,

扫描二维码关注公众号,回复: 10345562 查看本文章

在这里插入图片描述
综合比较的话,大家可以根据项目的实际情况两种方式均可,当然,个人更加偏向于第一种,因为在项目的任何地方都可以很方便的引用,前提是你需要知道key的名称,
 

发布了2778 篇原创文章 · 获赞 823 · 访问量 296万+

猜你喜欢

转载自blog.csdn.net/kwame211/article/details/104770154