public class AclJob extends QuartzJobBean implements StatefulJob
原本的接口 继承QuartzJobBean 实现StatefulJob
这个版本的StatefulJob 已经过期 需要将对应的注释放到新的类上
@PersistJobDataAfterExecution @DisallowConcurrentExecution
@PersistJobDataAfterExecution 每次执行完后 会持久化jobDataMap中的数据
@DisallowConcurrentExecution 不允许同时并行执行
原本的业务在 job中,继续调用其他service 如下
然后在调用的job业务中 将原来的job删除 新加一个job并设置新的触发时间点 但是其中的jobDataMap部分的数据在下一次 并不会正常的更新触发
即这里的usingJobData设置的值在下一次执行job时 取的仍然是第一次 初始设置的值 以后都是这个初始值 并不会因为重新设置而修改
解决方法:
1. 去掉实现 StatefulJob ,将job改为无状态的job
statefulJob为有状态的job 执行后jobDataMap会持久化
如果要排除并发将@DisallowConcurrentExecution 放到自己新加的job类上 但不要加@PersistJobDataAfterExecution
@PersistJobDataAfterExecution这个会影响 jobDataMap的取值,导致只取到初始值 第一次设置的
2.直接在job的
executeInternal方法内 将JobDataMap将到 业务的service层里 然后进行对应的key修改才会生效 如下图