需求:
可配置定时器、mysql实例、数据库、表、查询sql语句、触发阈值、维护sql语句,通过定时查询某表的容量,并与设置的阈值比较,符合条件触发维护sql执行。
系统:
centos7
语言:
golang
包
go-spring、gin、gorm、robfig/cron
robfig/cron的使用示例
package main
import (
l4g "github.com/alecthomas/log4go"
"github.com/robfig/cron"
)
func text() {
l4g.Info("text")
}
func main() {
c := cron.New()
c.AddFunc("* * * * * *", func() { text() })
c.Start()
select {}
}
使用go-spring集成gin、gorm
目录如下:
image.png
package brun // import "table_maintain"
import (
sb "github.com/go-spring/go-spring/spring-boot"
_ "github.com/go-spring/go-spring/starter-gin"
_ "github.com/go-spring/go-spring/starter-mysql-gorm"
)
func main() {
sb.RunApplication("brun/")
}
配置文件application.yaml
db:
url: root:root@tcp(192.168.199.107:3308)/table_maintain?charset=utf8&parseTime=true&loc=Local
封装一个自己的log
之前一直用logrus,这里既然都是用了go-spring就直接使用它的日志包吧,发现会输出文件名与行号,简单封装一下用到的。
package common
import (
"fmt"
SpringLogger "github.com/go-spring/go-spring-parent/spring-logger"
)
// 流程名
const FlowBoot = "启动器"
func LogInfo(flow, operation, input interface{} ,args ...interface{}) {
template := fmt.Sprintf("流程:%v,操作:%v,状态:成功,输入:%v", flow, operation, input)
SpringLogger.Infof(template, args...)
}
func LogPanic(flow, operation, input, err interface{},args ...interface{}) {
template := fmt.Sprintf("流程:%v,操作:%v,状态:失败,输入:%v,错误:%v", flow, operation, input, err)
SpringLogger.Panicf(template, args...)
}
启动器中将cron注册bean到ioc容器
package starter
import (
sb "github.com/go-spring/go-spring/spring-boot"
"github.com/robfig/cron/v3"
)
func init() {
sb.RegisterBean(cron.New(cron.WithSeconds()))
}
数据表
通用字段:
id、created_at、modified_at、deleted_at
任务(名称、定时表达式、查询语句、维护语句、阈值、状态[启用、失效])
执行记录(任务id、执行结果、报错信息)
网友评论