修复日期:2026-05-27
范围:JobInvokeUtil、TenantJobDispatcherJob、QuartzSaaSConfig及fs-service内重复的com.fs.quartz.*拷贝
SaaS 改造时,定时任务相关代码被拷贝到多个模块,且包名完全相同,导致:
| 现象 | 说明 |
|---|---|
| IDE 中看到多个同名类 | 实际来自不同模块源码 |
| 运行时只加载一份 | Fat Jar 按 classpath 顺序覆盖,行为不确定 |
| 改一处漏一处 | 例如 isInvokeTargetAvailable 曾需改两个 JobInvokeUtil |
| 类 | 修复前位置 |
|---|---|
JobInvokeUtil |
fs-quartz、fs-service |
TenantJobDispatcherJob |
fs-service、fs-admin-saas、fs-agent |
QuartzSaaSConfig |
fs-service、fs-admin-saas、fs-agent |
SysJob / SysJobMapper / CronUtils 等 |
fs-quartz、fs-service(内容一致,纯重复) |
为何 SaaS 类在 fs-service?
TenantJobDispatcherJob 依赖租户切库(TenantInfoService、TenantDataSourceManager),这些在 fs-service;fs-quartz 不能反向依赖 fs-service。
为何应用模块又拷一份?
fs-admin-saas、fs-agent 拆模块时把 SaaS Quartz 配置再次拷贝到本模块 src。
| 类型 | 唯一归属模块 | 说明 |
|---|---|---|
| 通用 Quartz 工具与领域 | fs-quartz | JobInvokeUtil、SysJob、SysJobMapper、CronUtils 等 |
| SaaS 租户任务分发 | fs-service | TenantJobDispatcherJob、QuartzSaaSConfig |
| 应用入口 | fs-admin-saas / fs-agent | 不再包含上述类的源码拷贝 |
| 文件 | 操作 | 原因 |
|---|---|---|
fs-service/pom.xml |
将 quartz 依赖改为 com.fs:fs-quartz |
编译期使用 fs-quartz 中的工具类,删除重复源码 |
fs-service/.../quartz/util/JobInvokeUtil.javafs-service/.../quartz/util/ScheduleUtils.javafs-service/.../quartz/util/QuartzJobExecution.javafs-service/.../quartz/util/QuartzDisallowConcurrentExecution.javafs-service/.../quartz/util/CronUtils.javafs-service/.../quartz/util/AbstractQuartzJob.javafs-service/.../quartz/service/ISysJobService.javafs-service/.../quartz/service/ISysJobLogService.javafs-service/.../quartz/mapper/SysJobMapper.javafs-service/.../quartz/domain/SysJob.javafs-service/.../quartz/domain/SysJobLog.javafs-service/.../quartz/saas/TenantJobDispatcherJob.javafs-service/.../quartz/saas/QuartzSaaSConfig.javafs-admin-saas/.../quartz/saas/TenantJobDispatcherJob.javafs-admin-saas/.../quartz/saas/QuartzSaaSConfig.javafs-agent/.../quartz/saas/TenantJobDispatcherJob.javafs-agent/.../quartz/saas/QuartzSaaSConfig.javaCompanyWorkflowLobsterEdgeMapper / VariableMapper:updateById 重命名为 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 缺失刷屏。