springboot实现动态加载远程配置文件有个独立的API项目,该项目主要是对外部各个系统提供API接口,为了保证调用的安全,需要对请求进行校验 , 主要校验包括调用频率,访问IP,是否跨域和Token , 其中IP和是否跨域的配置会根据接入方进行相应的修改 , 为了避免每次有新的接入方就得去修改一次配置文件并重启项目,所以打算使用动态配置的方式 。
初级实现方案:API服务每隔5分钟向管理端请求一次数据,管理端添加IP和域白名单的管理,这个实现方案 , 简单好用,但是弊端也明显,管理端每次修改完配置后,客户端需要等待下次请求后才会加载对应的配置,同时,还需要自己管理获取到的配置文件
更新方案:在springboot启动时,先从远端获取配置文件,并将其加载进Environment对象中,其余的,就都交给Spring了 。同时配合spring-cloud-context实现远程配置变更后,本地重新拉取配置并更新
点进去之后,springboot会在这里初始化ConfigurableEnvironment对象
这里是给ConfigurableEnvironment做一些初始化工作,我们先不管了 , 重点在这里,listeners.environmentPrepared(environment);,Springboot通过事件,将Environment的加载分发出去
到此为止 , 我们就能像使用本地配置文件一样使用服务器上的配置文件了,但是这里还只实现了加载远程配置文件,我们还需要在远程配置文件变更时,实现配置文件的热更新
Go 各种方式加载配置文件go run 或者 go build后在配置目录的相对路径上执行
假设当前目录如下:
├─config
││main.go
││
│└─file// 配置文件目录
│config.ini
│
也就是说无论你是go run或者build后的执行程序,都应该在你执行目录下
有该配置文件路径如file/config.ini
否则就会发生以下错误, 无法读取配置文件
panic: Error:can not read file "./file/config.ini"
使用绝对路径读取配置文件
如果配置文件动态的话, 具体怎么传入 配置文件路径
go-bindata 把配置文件打包进去
5.1 使用远程配置中心去读取配置
Springboot 使用@RefreshScope 注解,实现配置文件的动态加载实现配置文件动态读取的好处不必多说,修改配置文件后不必重启Application ,想想就开心 。
合格调包侠的必备技能,从Maven仓库引入依赖的Jar包,
搞好配置文件,默认在application.yml /properties 就行,与本功能相关的配置项(采用yml格式)如下:
distributed-id是自定义需要动态部署的配置文件 。management:是暴露refresh接口,不加此条配置将无法启用动态加载配置文件的功能(也就是管你理解不理解,别问 , 加就对了) 。
1.编写自定义配置文件的Java对象,一定要在类上加@RefreshScope注解
@data是lombok的注解,别的注解不多说 。
2.编写你的conroller ,也一定要加@RefreshScope注解, 不加的话,呵呵,对不起 , 无法运行 。。原因吗---在这 @RefreshScope not working - Spring Boot - Stack Overflow
我这里是返回配置文件中distributed-id.mechineId的值 。
3.到此为止了,简单吧?? 。其实的话,第一步也可以直接在Bean的配置中心(也就是@Configuration注解的类)搞一下,效果是一样的 。
使用这种写法,就可以不用在配置对象类上加@Component和@RefreshScope 。
测试一下啦,启动应用前,将配置文件设置如下:
运行程序后,在浏览器输入你的测试地址,返回如下,是5没错了:
然后找到你编译后文件,修改配置文件的值,注意是编译后的配置文件就是下图中灰色文件的位置
推荐阅读
- 声卡电脑直播教程,电脑声卡直播怎么用视频教程
- js插入元素到数组指定下标,js怎么往数组里加元素
- 直播互动素材剪辑,直播现场素材
- vb.net线程挂起 vbnet多线程编程
- u盘怎么调大小,u盘设置大小怎么设置
- 玫琳凯订货网站制作,玫琳凯订货网站
- 关于thinkphpjpg转bmp的信息
- gdb命令linux linux gdb命令
- 苹果cms友链pc端显示,3点40的飞机,几点到机场