八、job并发及持久化
Job中需要掌握的两个注解:
- @DisallowConcurrentExecution
- @PersistJobDataAfterExecution
场景一、有些场景需要这种规避并发访问的问题。
- job中给了1秒的间隔时间,每过一秒执行一次任务,每次任务的jobDetail实例是不一样的。
- 虽然每次的任务内容没有发生变化,但是实例却不一样了。
【验证】:每次任务的jobDetail实例是不一样的
场景二、不想要多线程执行:因为上一个任务还没有执行完,定时1秒后,不管设不设置sleep都执行下一个任务了。
- 我们希望上一个任务没有执行完的时候,后一个任务不让他立即执行。
这时候我们就可以使用:@DisallowConcurrentExecution
- 不是同一个实例,不过是同一个job定义。
代码演示:
加了这个注解之后,就可以变成并发的访问方式,变成MyJob.java中设置的3秒一次
场景三、每一次的JobDataMap实例也是不一样的,此时不希望每次都变。
【演示】:不加注解后每次JobDataMap实例不一样
这时候就可以使用:@PersistJobDataAfterExecution注解
- 持久化JobDetail中的JobDataMap【对trigger中的datamap无效】
代码演示: