Quartz重复类收敛说明.md 3.4 KB

Quartz 重复类收敛说明

修复日期:2026-05-27
范围:JobInvokeUtilTenantJobDispatcherJobQuartzSaaSConfigfs-service 内重复的 com.fs.quartz.* 拷贝


一、问题原因

SaaS 改造时,定时任务相关代码被拷贝到多个模块,且包名完全相同,导致:

现象 说明
IDE 中看到多个同名类 实际来自不同模块源码
运行时只加载一份 Fat Jar 按 classpath 顺序覆盖,行为不确定
改一处漏一处 例如 isInvokeTargetAvailable 曾需改两个 JobInvokeUtil

重复分布(修复前)

修复前位置
JobInvokeUtil fs-quartzfs-service
TenantJobDispatcherJob fs-servicefs-admin-saasfs-agent
QuartzSaaSConfig fs-servicefs-admin-saasfs-agent
SysJob / SysJobMapper / CronUtils fs-quartzfs-service(内容一致,纯重复)

为何 SaaS 类在 fs-service?
TenantJobDispatcherJob 依赖租户切库(TenantInfoServiceTenantDataSourceManager),这些在 fs-servicefs-quartz 不能反向依赖 fs-service

为何应用模块又拷一份?
fs-admin-saasfs-agent 拆模块时把 SaaS Quartz 配置再次拷贝到本模块 src


二、收敛策略(修复后)

类型 唯一归属模块 说明
通用 Quartz 工具与领域 fs-quartz JobInvokeUtilSysJobSysJobMapperCronUtils
SaaS 租户任务分发 fs-service TenantJobDispatcherJobQuartzSaaSConfig
应用入口 fs-admin-saas / fs-agent 不再包含上述类的源码拷贝

三、修改文件清单

3.1 修改(1)

文件 操作 原因
fs-service/pom.xml quartz 依赖改为 com.fs:fs-quartz 编译期使用 fs-quartz 中的工具类,删除重复源码

3.2 删除 — fs-service 中与 fs-quartz 重复的 11 个文件

  • fs-service/.../quartz/util/JobInvokeUtil.java
  • fs-service/.../quartz/util/ScheduleUtils.java
  • fs-service/.../quartz/util/QuartzJobExecution.java
  • fs-service/.../quartz/util/QuartzDisallowConcurrentExecution.java
  • fs-service/.../quartz/util/CronUtils.java
  • fs-service/.../quartz/util/AbstractQuartzJob.java
  • fs-service/.../quartz/service/ISysJobService.java
  • fs-service/.../quartz/service/ISysJobLogService.java
  • fs-service/.../quartz/mapper/SysJobMapper.java
  • fs-service/.../quartz/domain/SysJob.java
  • fs-service/.../quartz/domain/SysJobLog.java

3.3 保留 — fs-service(2)

  • fs-service/.../quartz/saas/TenantJobDispatcherJob.java
  • fs-service/.../quartz/saas/QuartzSaaSConfig.java

3.4 删除 — fs-admin-saas(2)

  • fs-admin-saas/.../quartz/saas/TenantJobDispatcherJob.java
  • fs-admin-saas/.../quartz/saas/QuartzSaaSConfig.java

3.5 删除 — fs-agent(2)

  • fs-agent/.../quartz/saas/TenantJobDispatcherJob.java
  • fs-agent/.../quartz/saas/QuartzSaaSConfig.java

3.6 其他

  • CompanyWorkflowLobsterEdgeMapper / VariableMapperupdateById 重命名为 updateSelectiveById,消除 MyBatis-Plus 启动提示

四、验证

mvn -f ylrz_saas_his_scrm/pom.xml -pl fs-admin-saas -am compile -DskipTests
java -jar fs-admin-saas/target/fs-saasadmin-exec.jar

启动后确认:[SaaS Quartz] 租户任务分发器已注册,且无 qwTask Bean 缺失刷屏。