通过定时器实现配置文件热更新

简介: 配置文件修改及时生效

配置文件修改后,要达到及时生效,热加载的目的,那么可以通过2种方式实现

  1. 定时器循环,查看文件更新时间,如果发现有修改,那么重新加载
  2. 监听信号,文件更改后触发信号,通过捕获信号,再重新加载


例如,线上的应用日志级别为 info ,出现故障后,你需要开启 debug 来排查日志,但是把日志级别改成 debug ,那么你不得不重启应用,可能故障现象就不存在或不好重现了,而且重启服务可能会影响用户体验。


以下我就介绍一种定时器循环的方式来实现吧。

packagemainimport (
"encoding/json""fmt""io/ioutil""log""os""time")
//全局自定义拦截varintercept []Intercept//文件时间varftint64varfilenamestring="/Users/jiangyd/mygo/src/gi/intercept.json"typeInterceptstruct {
Urlstring`json:"url"`Methodstring`json:"method"`RespHeadermap[string]string`json:"resp_header"`RespBodyinterface{}       `json:"resp_body"`RespCodeint`json:"resp_code"`}
//读取自定义响应文件funcRead_resp() {
intercept_data, err :=ioutil.ReadFile(filename)
iferr!=nil {
log.Fatalln(err)
    }
err=json.Unmarshal(intercept_data, &intercept)
iferr!=nil {
log.Fatalln(err)
    }
}
funcmain() {
//启用定时器t :=time.NewTicker(1*time.Second)
gofunc() {
for {
_, ok :=<-t.Cifok {
fileinfo, err :=os.Stat(filename)
iferr!=nil {
fmt.Println(err)
                }
iffileinfo.ModTime().UnixNano() >ft {
Read_resp()
ft=fileinfo.ModTime().UnixNano()
                }
            }
        }
    }()
//循环打印for {
time.Sleep(1*time.Second)
iflen(intercept)>0{
fmt.Println(intercept[0].RespBody)
        }
    }
}

配置文件

[{
"url": "http://test.cloudcare.cn/api/v1/workspace/member/list",
"method": "get",
"resp_body": {"msg": "c"},
"resp_header": {"Content-Type": "application/json"},
"resp_code": 200}]


运行程序后,我编辑配置文件内容 resp_body  可以被重新加载到

map[msg:m]
map[msg:a]
map[msg:a]
map[msg:a]
map[msg:b]
map[msg:c]
map[msg:c]
目录
相关文章
|
4月前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
404 0
|
4月前
|
Go 数据库 开发者
热更新最佳实践,网站无感知重启方法大全
热更新最佳实践,网站无感知重启方法大全
120 0
|
1月前
Vue3项目打包时开启 Gzip 压缩和移动端调试时开启 vConsole 调试
本文介绍了如何在Vue3项目中配置开启Gzip压缩以减小打包文件体积,并在移动端调试时集成vConsole插件,同时使用webpack-bundle-analyzer插件进行打包分析。
140 0
Vue3项目打包时开启 Gzip 压缩和移动端调试时开启 vConsole 调试
|
NoSQL Java 调度
定时任务基本使用指南(cron 时间表达式、Spring 自带调度器、JDK 原生定时器)
定时任务基本使用指南(cron 时间表达式、Spring 自带调度器、JDK 原生定时器)
616 0
|
10月前
|
前端开发 API 开发者
热更新原理
热更新原理
146 0
|
JavaScript
vue项目实现轮询定时器-关闭定时器(整理)
vue项目实现轮询定时器-关闭定时器(整理)
|
存储 数据可视化 Java
SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来
前言 传统定时器是硬编码。但是有的时候业务上需要不断地调整 问题描述 我们开发了一个定闹钟的功能。这个功能肯定是定时器开发。但是这就存在一个问题这个定时是动态的。那么我们如何实现呢?请接着看
|
JavaScript
Vue 开启或关闭热更新
Vue 开启或关闭热更新
569 0
|
JavaScript
热更新插件更新啦
热更新插件更新啦
145 0
|
运维 NoSQL Java
从源码研究如何不重启项目实现redis配置动态切换
上一篇Websocket的续篇暂时还没有动手写,这篇算是插播吧。今天讲讲不重启项目动态切换redis服务。
从源码研究如何不重启项目实现redis配置动态切换