最近需要开发一个文件服务sdk,底层使用mongoDB的GirdFs存储。但是不希望各业务线直连数据库。
所以开发一个Client,封装一下增删改查代码,打包成starter提供。
简单的SpringBootStarter项目我前面有写。
这一篇主要记录下与Nacos的整合。
之前我就写过Nacos的配置管理功能,可以实现热更新,有命名空间隔离。恰好能满足我的需求。
1,创建一个SpringBoot Starter项目
如我前文所述。SpringBoot Starter一般由两个项目组成。一个是Starter,不用写代码,只是一个pom文件,做依赖管理之用。
另一个是config项目,代码都在这里。做自动配置管理使用。
注意,这个项目是一个普通的Spring项目,不是Springboot的,不要依赖Springboot
2,引入依赖
再次强调,Starter不是一个SpringBoot,只是一个Spring项目。所以不能使用nacos-config-spring-boot-starter,而是要用
nacos-spring的依赖
com.alibaba.nacos nacos-spring-context 0.3.1
2,代码举例
我这里使用nacos的目的是为了把连接Mongo的配置放到配置中心。
核心代码如下:
这样我就可以把nacos配的连接参数拉过来。
3,源码修改
但是呢,有个问题。我要对接几十个业务。他们后台库各不相同。所以我需要根据不同的应用,多去不同的连接参数。
我需要让dataId是可配置的,由用户写在自己的配置文件里,在客户端启动时加载。
很可惜,目前的nacos-spring版本还不支持,据了解下个版本会支持。
这里,我直接修改了nacos-spring-context的源码,加了获取环境变量的功能。
修改方法:
下载nacos-spring-project源码
找到com.alibaba.nacos.spring.core.env.AbstractNacosPropertySourceBuilder 这个类
这是nacos属性资源的构造器
找到doBuild方法
加上这一句,就是从本地的环境变量里,取一下dataId这个配置参数
如果有,就用环境变量里的dataId。如果没有,就用代码里写的dataId
(图没截全,下面代码里的dataId都改成realDataId)
ConfigurableEnvironment
4,客户端使用
将编写好的Starter打包install
将打包好的Starter以来进来
在application.properties文件里写好需要的配置参数
app.hfs.dataId=mongoapp.hfs.securityKey=GHxy6Y1
完成