表中有一条数据
A字段 varchar 'Y' or 'N'开关
B字段 varchar (hh:mi:ss)
C字段 Integer
D字段 Integer
现在的业务要求是,服务器启动之后。根据A字段的开关,决定是否在每天的B字段时间执行求和C+D的方法
也就是说后台需要根据这条数据来实现该业务。请问如何实现。(该数据由前台维护,前台部分忽略)
重要的是这条数据会随时改变。随时进行修改。
c+d求和只是模拟。其实是根据c和d字段来调用其他的接口方法(忽略)
各位大神可否说的详细些。万分感谢
如果你是再真实的项目中用,要考虑你后台作业的稳定和可靠运行,可以使用Quartz 参考 https://blog.csdn.net/w405722907/article/details/72458059
也可以用数据库的触发器和定时任务 https://www.cnblogs.com/it-aaron/p/6756924.html
思路是每天的B字段时间的可能间隔都执行一次判断。(比如说,B字段规定(hh:mi:ss,那么每一秒都判断一次,如果符合条件并且到了时间,就执行,否则不执行)
不是有延迟定时器吗? 启动时候计算下次时间的有多久 就添加一个延迟定时器 ,添加的定时器执行完了 计算第二天的延迟时间 再添加延迟定时器 一直重复
可以在服务器启动后开启一个常驻线程,时刻查询B的值,和当前时间一致就判断A的值,如果为Y则计算C+D。
也可以用spring的timer,类似Quarz,但更轻量。直接使用这条数据的时间作为定时任务的执行时间,每次执行的时候,再查开关状态,开关为‘Y’就执行
可以用quartz做任务执行器,然后对该实体(表)的CUD操作做监听,C:创建job并加入Scheduler ;U:检查job是否已经在Scheduler中,有的话先删除,添加新job;D:从Scheduler中删除job。注意,如果是分布式环境,需要额外处理,比如:在表结构上加是否已执行字段,然后每次执行job前锁行,执行结束后释放锁。
对了,给你分享个链接吧,你可以参考下:http://skyfar666.iteye.com/blog/2205583。他是每天定时监听,你只需要监听你的这个表的数据变动即可,就是监听CUD操作。
C+D其实不重要吧,不管是啥你只管定时执行。是这样理解的吗,前端维护你做个修改就好。楼上说了quatz或者spring自带的定时器都是可以的。根据B的时间去执行C+D
利用Scheduled注解+cron表达式实现定时功能
@Scheduled(cron = "0 0/1 * * * ?")
比如这个表示每分钟执行一次
具体可以参照cron表达式
方法逻辑:
1.从数据库获取A作为条件
2.根据1的结果决定是否在B时间执行C和D
如果对时间精度要求较高也可以改成每秒执行。。应该不会有人在一秒内改变那个字段吧?