0
点赞
收藏
分享

微信扫一扫

【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂


八、job并发及持久化

Job中需要掌握的两个注解:

  • @DisallowConcurrentExecution
  • @PersistJobDataAfterExecution

场景一、有些场景需要这种规避并发访问的问题。

  • job中给了1秒的间隔时间,每过一秒执行一次任务,每次任务的jobDetail实例是不一样的
  • 虽然每次的任务内容没有发生变化,但是实例却不一样了。

【验证】:每次任务的jobDetail实例是不一样的

【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_八、job并发及持久化


【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_java_02

场景二、不想要多线程执行:因为上一个任务还没有执行完,定时1秒后,不管设不设置sleep都执行下一个任务了。

  • 我们希望上一个任务没有执行完的时候,后一个任务不让他立即执行。

这时候我们就可以使用:@DisallowConcurrentExecution

【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_多线程_03

  • 不是同一个实例,不过是同一个job定义。
    代码演示:

    加了这个注解之后,就可以变成并发的访问方式,变成MyJob.java中设置的3秒一次

场景三、每一次的JobDataMap实例也是不一样的,此时不希望每次都变。

【演示】:不加注解后每次JobDataMap实例不一样

【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_java_04


【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_java_05


【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_八、job并发及持久化_06

这时候就可以使用:@PersistJobDataAfterExecution注解

  • 持久化JobDetail中的JobDataMap【对trigger中的datamap无效】

代码演示:

【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_多线程_07


【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_八、job并发及持久化_08


【jeecg-boot项目开发crm】:平台技术点——day05【Java定时任务解决方案:八、job并发及持久化】:图灵课堂_持久化_09


举报

相关推荐

0 条评论