Springboot项目接入Apollo配置中心

本文只介绍Springboot项目接入Apollo配置中心的过程。在实践过程中,我发现不需要进行那么繁琐的配置就可以实现,故写本文章对使用指南进行简化,用于记录备忘,以便于以后springboot项目快速接入Apollo配置中心。

更详细的接入请参考Apollo官方提供的Java客户端使用指南:https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#%E4%BA%8Cmaven-dependency

本文的前提条件:Apollo配置中心的服务端已经搭建好并且已经在Apollo的管理界面中新建了该springboot项目对应的应用,而且namespace中已经添加了所有的配置。

 

一、准备工作

1.1 环境要求

  • Java: 1.7+
  • Guava: 15.0+
    • Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0

1.2 引入Apollo客户端依赖

在Springboot项目的pom.xml中引入Apollo客户端依赖,目前中央仓库中是1.1.0版本,以后使用时如果中央仓库有更新可以调整版本信息。

<dependency>

<groupId>com.ctrip.framework.apollo</groupId>

<artifactId>apollo-client</artifactId>

<version>1.1.0</version>

</dependency>

1.3 必选设置

1.3.1 AppId

AppId是应用的身份信息,是从服务端获取配置的一个重要信息。本文通过app.properties文件的方式进行配置。

在src/main/resources路径下新建META-INF文件夹,然后新建app.properties文件,在文件中添加app.id=YOUR-APP-ID。完成后项目的目录结构及app.properties文件内容如下:

 

1.3.2 Apollo Meta Server

Apollo支持应用在不同的环境有不同的配置,所以需要在运行时提供给Apollo客户端当前环境的Apollo Meta Server信息。默认情况下,meta server和config service是部署在同一个JVM进程,所以meta server的地址就是config service的地址。

本文在Springboot配置文件中进行配置。在Spring Boot的application.properties或bootstrap.properties中指定apollo.meta=http://config-service-url。本项目是在bootstrap.yml中添加相应的配置,添加内容如下所示:

 

1.3.3 本地缓存路径

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本文通过配置Spring Boot的配置文件自定义了缓存的路径,可以在Spring Boot的application.properties或bootstrap.properties中指定apollo.cacheDir=/opt/data/some-cache-dir,配置如下:

 

1.4 自定义Apollo Meta Server地址定位逻辑

Apollo提供了MetaServerProvider SPI,用户可以注入自己的MetaServerProvider来自定义Meta Server地址定位逻辑。

因为本项目是单环境的,所以MetaServerProvider的实现就参考了指南上的DefaultMetaServerProvider。如果是多环境的话就可以参考LegacyMetaServerProvider。

 

1.5 可选设置

可选设置包括环境、集群、内存中配置项的顺序及配置访问秘钥的设置。因为该项目是基于Apollo提供的快速启动的配置中心接入的,所以没有多环境和集群,这里就没有做特殊设置。如果有需求的话根据Apollo的Java客户端使用指南设置即可。

二、和Springboot整合

2.1 添加配置

在springboot的配置文件中添加引入Apollo的配置:

1. 注入默认application namespace的配置示例

# will inject 'application' namespace in bootstrap phase

apollo.bootstrap.enabled = true

2. 注入非默认application namespace或多个namespace的配置示例

apollo.bootstrap.enabled = true

# will inject 'application', 'FX.apollo' and 'application.yml' namespaces in bootstrap phase

apollo.bootstrap.namespaces = application,FX.apollo,application.yml

本项目就使用了默认的namespace,所以使用方式1进行配置。

 

2.2 添加Apollo的配置类

添加Apollo的配置类,使得通过@Value的方式可以引用到Apollo配置中心与app.id名称一致的应用的namespace中配置的属性值。

本项目添加了ApolloConfig类,注意在类上面需要添加@Configuration和@EnableApolloConfig注释。

 

至此,Springboot项目的属性值就能通过@Value的方式获取到了。经过测试,在Config类、Controller类、Service类中都可以通过@Value获取到配置中心的属性值,并且配置中心的值修改完发布后,项目里面的值也会实时更新。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值