一键导入
quartz-xugudb-adapter
Quartz 任务调度框架适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Quartz 的 Java 项目配置或适配到虚谷数据库时使用此技能,包括数据库初始化、配置文件修改、集群配置、作业调度等。适用于从 MySQL/Oracle 迁移或新建虚谷数据库项目。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Quartz 任务调度框架适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Quartz 的 Java 项目配置或适配到虚谷数据库时使用此技能,包括数据库初始化、配置文件修改、集群配置、作业调度等。适用于从 MySQL/Oracle 迁移或新建虚谷数据库项目。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Activiti 工作流引擎与虚谷数据库(XuguDB)集成适配指南。当用户需要在 Spring Boot 项目中使用 Activiti 工作流引擎连接 XuguDB 时使用此技能,包括流程引擎配置、数据源设置、BPMN 流程定义、任务管理、历史记录查询等。适用于企业级工作流应用、审批流程、业务流程自动化等场景。
AnyLine 动态数据源框架适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 AnyLine 的 Java 项目配置或适配到虚谷数据库时使用此技能,包括动态数据源注册、切换、元数据操作、DDL/DML 自动生成等。适用于数据中台、低代码平台、异构数据库迁移等场景。
Azkaban 工作流管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Azkaban 的工作流管理器配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、工作流定义、任务调度、监控管理等。适用于大数据作业调度和管理场景。
Camunda BPM 平台适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Camunda 的工作流和决策自动化平台配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、BPMN 流程定义、任务管理、REST API、UI 管理界面等。适用于企业级工作流应用、审批流程、业务流程自动化、案例管理等场景。
CloudBeaver 云数据库管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要使用 CloudBeaver 连接和管理虚谷数据库时使用此技能,包括部署安装、驱动配置、连接管理、用户权限等。适用于团队协作、远程数据库管理场景。
DataEase 开源 BI 工具适配虚谷数据库(XuguDB)的完整指南。当用户需要将 DataEase 连接到虚谷数据库进行数据可视化分析时使用此技能,包括驱动配置、数据源连接、数据集创建、仪表板设计等。适用于企业数据可视化、自助分析、报表分享等场景。
| name | quartz-xugudb-adapter |
| description | Quartz 任务调度框架适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Quartz 的 Java 项目配置或适配到虚谷数据库时使用此技能,包括数据库初始化、配置文件修改、集群配置、作业调度等。适用于从 MySQL/Oracle 迁移或新建虚谷数据库项目。 |
本技能提供 Quartz 任务调度框架适配虚谷数据库(XuguDB)的完整流程。虚谷数据库通过提供专用的初始化脚本和配置支持,可以无缝集成 Quartz 框架的各种功能,包括作业调度、触发器管理、集群部署等。
在开始适配前,按以下顺序检查和修改:
1. 依赖配置 → 2. 数据库初始化 → 3. 配置文件修改 → 4. 作业开发 → 5. 集群配置 → 6. 测试验证
添加 Quartz 和虚谷 JDBC 驱动依赖:
<!-- Quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<!-- 虚谷JDBC驱动 -->
<dependency>
<groupId>com.xugudb</groupId>
<artifactId>xugu-jdbc</artifactId>
<version>12.3.4</version>
</dependency>
<!-- Druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
根据您使用的 Quartz 版本,数据库初始化文件的位置不同:
| Quartz 版本范围 | 数据库初始化文件 (tables_xugu.sql) 位置 |
|---|---|
| V2.3.0 ~ V2.3.2 | .\quartz-core\src\main\resources\org\quartz\impl\jdbcjobstore\ |
| V2.2.0 ~ V2.2.3 | .\distribution\src\main\assembly\root\docs\dbTables\ |
| V1.8.0 ~ V2.1.7 | .\docs\dbTables\ |
-- 在虚谷数据库中执行 tables_xugu.sql 脚本
-- 创建 Quartz 所需的表结构
在 Spring Boot 项目中,可以配置自动初始化:
spring:
quartz:
jdbc:
initialize-schema: ALWAYS # 首次启动设为 ALWAYS 自动建表
platform: xugu # 指定数据库平台为虚谷
注意: 首次启动后,建议将 initialize-schema 改为 NEVER,避免重复创建表。
spring:
datasource:
url: jdbc:xugu://127.0.0.1:5138/quartz
username: SYSDBA
password: SYSDBA
driver-class-name: com.xugu.cloudjdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
initialSize: 5
minIdle: 10
maxActive: 20
maxWait: 60000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
quartz:
# 数据库初始化配置
jdbc:
initialize-schema: NEVER # 首次可设为 ALWAYS 自动建表,之后改为 NEVER
platform: xugu # 关键配置,指定数据库平台为虚谷
# 作业存储类型为数据库
job-store-type: jdbc
# 调度器名称
scheduler-name: MyScheduler
properties:
org:
quartz:
scheduler:
instanceName: MyScheduler
threadName: MyQuartzThread
jobStore:
# 使用标准JDBC代理
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# 数据源名称
dataSource: myDS
# 表名前缀
tablePrefix: QRTZ_
# 是否启用集群
isClustered: false
clusterCheckinInterval: 15000
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 15
threadNamePrefix: MyQuartzPool
| 配置项 | 说明 | 推荐值 |
|---|---|---|
spring.quartz.jdbc.platform | 数据库平台 | xugu |
spring.quartz.job-store-type | 作业存储类型 | jdbc |
spring.quartz.jdbc.initialize-schema | 是否自动初始化表结构 | NEVER |
org.quartz.jobStore.driverDelegateClass | JDBC 代理类 | StdJDBCDelegate |
org.quartz.jobStore.tablePrefix | 表名前缀 | QRTZ_ |
org.quartz.jobStore.isClustered | 是否启用集群 | false |
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 获取作业数据
String jobData = context.getMergedJobDataMap().getString("jobData");
// 执行业务逻辑
System.out.println("执行作业: " + jobData);
}
}
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class QuartzScheduler {
@Autowired
private Scheduler scheduler;
public void addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException {
// 创建作业详情
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity(jobName, jobGroup)
.usingJobData("jobData", "自定义数据")
.build();
// 创建触发器
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobName + "Trigger", jobGroup)
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();
// 调度作业
scheduler.scheduleJob(jobDetail, trigger);
}
public void deleteJob(String jobName, String jobGroup) throws SchedulerException {
scheduler.deleteJob(JobKey.jobKey(jobName, jobGroup));
}
public void pauseJob(String jobName, String jobGroup) throws SchedulerException {
scheduler.pauseJob(JobKey.jobKey(jobName, jobGroup));
}
public void resumeJob(String jobName, String jobGroup) throws SchedulerException {
scheduler.resumeJob(JobKey.jobKey(jobName, jobGroup));
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/task")
public class QuartzDemoController {
@Autowired
private QuartzScheduler quartzScheduler;
@PostMapping("/simpleJob")
public String createJob() {
try {
quartzScheduler.addJob("testJob", "testGroup", "0/5 * * * * ?");
return "作业创建成功";
} catch (Exception e) {
return "作业创建失败: " + e.getMessage();
}
}
@DeleteMapping("/deleteJob")
public String deleteJob() {
try {
quartzScheduler.deleteJob("testJob", "testGroup");
return "作业删除成功";
} catch (Exception e) {
return "作业删除失败: " + e.getMessage();
}
}
}
spring:
quartz:
properties:
org:
quartz:
jobStore:
isClustered: true
clusterCheckinInterval: 15000
scheduler:
instanceId: AUTO
isClustered: true# 设置JAVA_HOME(虚谷JDBC驱动需要Java 17+)
set JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-21.0.11.10-hotspot
set PATH=%JAVA_HOME%\bin;%PATH%
# 编译打包
mvn clean package -DskipTests
java -jar ruoyi-admin/target/ruoyi-admin.jar
# 创建作业
curl -X POST http://localhost:8080/task/simpleJob
# 删除作业
curl -X DELETE http://localhost:8080/task/deleteJob
现象: 启动时报错 Driver class not found
原因: JDBC 驱动未正确引入
解决: 确保 xugu-jdbc 依赖已正确配置
现象: 连接时报错 Invalid connection URL
原因: URL 参数错误
解决: 确保使用正确的 URL 格式
url: jdbc:xugu://127.0.0.1:5138/quartz
现象: 启动时报错 "相关表不存在"
原因: 数据库初始化脚本未执行
解决:
tables_xugu.sql 初始化脚本spring.quartz.jdbc.initialize-schema: ALWAYS现象: 调度器启动失败
原因: 配置错误或数据库连接问题
解决:
现象: 作业执行失败
原因: 作业逻辑错误或资源不足
解决:
现象: 集群节点之间不同步
原因: 集群配置不正确
解决:
isClustered 配置现象: 非 Spring Boot 项目需要配置 Quartz
原因: 需要使用 quartz.properties 文件
解决: 使用以下配置:
# 调度器配置
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
# 线程池配置
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 15
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
# 作业存储配置
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
# 数据源配置
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.myDS.driver = com.xugu.cloudjdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:xugu://127.0.0.1:5138/quartz
org.quartz.dataSource.myDS.user = SYSDBA
org.quartz.dataSource.myDS.password = SYSDBA
org.quartz.dataSource.myDS.maxConnections = 10
org.quartz.dataSource.myDS.validationQuery = SELECT 1
详细的配置和使用说明请参考: