actviti7 的 asyncExecutor
2023-07-03 09:38:03 0 举报
AI智能生成
actviti7 的 asyncExecutor
作者其他创作
大纲/内容
1. 真正的实现类, SpringAsyncExecutor
引入 spring-activiti 的依赖后, 由 springProcessEngineConfiguration 配置类来初始化
如果没有 spring-activiti 的依赖后, 真正的实现类 DefaultAsyncJobExecutor
1. 初始化
如果引入 spring-activiti 依赖之后,线程池参数无用。
1. 配置 org.activiti.engine.impl.asyncexecutor.DefaultAsyncJobExecutor#applyConfig
1.
如果没有指定,会创建一个默认的
如果引入 spring-activiti 依赖之后, 默认就是 SpringAsyncExecutor
2. ProcessEngineConfigurationImpl#initAsyncExecutor
2. 配置
asyncExecutor.start()
1. new ProcessEngineImpl()
3. 启动
2. 启动
1. 每次查询记录条数为 (maxAsyncJobsDuePerAcquisition = 1)
2. mybatis 对应 sql 的 id: selectTimerJobsToExecute
1. 获取 timerJob 列表
1. 锁定任务的时间 (asyncJobLockTimeInMillis = 5 * 60 * 1000)
2. 对 timeJob 任务添加 [lockOwner] 和 [lockExpirationTime]
2. 对每个 timeerJob 进行 lockJob
1. new AcquireTimerJobsCmd(asyncExecutor)
1. 锁定任务时间 ( timerLockTimeInMillis = 5 * 60 * 1000)
1. 移动 timerJob 到 job
2. 插入成功,删除原有的 timerJob
代码位置 org.activiti.engine.impl.jobexecutor.AsyncJobAddedNotification#closed
3.添加 AsyncJobAddedNotification 回调
2. jobManager.moveTimerJobToExecutableJob(job)
1. AcquireTimerJobsRunnable
1. 每次查询记录条数为 ( resetExpiredJobsPageSize = 3)
2. mybatis 对应的 sql 的 id: selectExpiredJobs
查找过期的 job
1. new FindExpiredJobsCmd(asyncExecutor.getResetExpiredJobsPageSize())
1. 查询到 job
2. 对每个job 都删除, 重新创建一个新的 job
3. 新的 job, lockExpirationTime 和 lockOwner 都为null
重置过期的 job
2. new ResetExpiredJobsCmd(expiredJobIds)
2. ResetExpiredJobsRunnable
1. 每次查询记录条数为 ( maxAsyncJobsDuePerAcquisition = 1 )
2. 查询 lockExpirationTime 为 null 的 数据
2. mybatis 对应的 sql 的 id: selectJobsToExecute
1. 获取 job 列表
1. 锁定 job 的时间 ( asyncJobLockTimeInMillis = 5 * 60 * 1000 )
2. 对每个 job 进行 lockJob
1. new AcquireJobsCmd(asyncExecutor)
2. 执行 job
3. AcquireAsyncJobsDueRunnable
1. 临时任务,可以在 初始化 ProcessEngineConfiguration 时 ,添加临时任务
4. executeTemporaryJobs()
3. 定时任务
asyncExecutor.executeAsyncJob(job)
ExecuteAsyncRunnable
AsyncExecutor
0 条评论
回复 删除
下一页