7d195a32创建于 2025年6月25日历史提交

Quartz使用GaussDB使用指南

Quartz 是 Java 领域强大的开源作业调度框架。

官方开发指南参考:https://www.quartz-scheduler.org/documentation/quartz-2.3.0/

本文主要提供Quartz连接GaussDB相关的简单使用指南。

JDBC驱动

连接GaussDB,推荐使用官方驱动。

  • 连接串:jdbc:gaussdb://host:port/database

  • Driver名称:com.huawei.gaussdb.jdbc.Driver

  • maven

    <dependency>
        <groupId>com.huaweicloud.gaussdb</groupId>
        <artifactId>gaussdbjdbc</artifactId>
        <version>506.0.0.b058</version>
    </dependency>
    

引入Quartz

  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.5.0</version>
  </dependency>

  <dependency>
    <groupId>com.huaweicloud.gaussdb</groupId>
    <artifactId>gaussdb-quartz</artifactId>
    <version>2.5.0</version>
  </dependency>

引入HikariCP(可选)

  <dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>3.4.5</version>
  </dependency>

在resources文件夹下,新建quartz.properties

# 主配置文件
org.quartz.scheduler.instanceName = GaussDBScheduler
org.quartz.scheduler.instanceId = AUTO

# 线程池配置
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5

# 作业存储配置
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
# Gaussdb 默认兼容模式
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.GaussDBDelegate=
# Gaussdb m兼容模式
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = quartz.qrtz_
#org.quartz.jobStore.isClustered = false
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000

# 数据源配置
org.quartz.dataSource.myDS.provider = hikaricp
org.quartz.dataSource.myDS.driver = com.huawei.gaussdb.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:gaussdb://ip:port/databaseName?currentSchema=quartz&preparedStatementCacheQueries=0&batchMode=off
org.quartz.dataSource.myDS.user = userName
org.quartz.dataSource.myDS.password = password
org.quartz.dataSource.myDS.maxConnections = 10

开发Job

public class SampleJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Job执行时间: " + new Date());
        System.out.println("Job参数: " + context.getJobDetail().getJobDataMap().getString("param1"));
        
        // 模拟业务处理
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

开发触发器

public class GaussDBQuartzDemo {
    public static void main(String[] args) throws Exception {
        // 1. 初始化调度器
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        
        // 2. 定义JobDetail
        JobDetail job = JobBuilder.newJob(SampleJob.class)
                .withIdentity("sampleJob", "group1")
                .usingJobData("param1", "来自Gauss的值")
                .storeDurably()
                .build();
        
        // 3. 定义触发器
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("cronTrigger", "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
                .build();
        
        // 4. 将任务和触发器注册到调度器
        scheduler.scheduleJob(job, trigger);

        // 注册监听器
        scheduler.getListenerManager().addJobListener(new SampleJobListener());

        // 5. 启动调度器
        scheduler.start();
        
        // 6. 运行一段时间后关闭
        Thread.sleep(60000);
        scheduler.shutdown(true);
        System.out.println("关闭...");
    }
}

运行建表语句

使用GaussDB的建表语句,在源码中也可以获取。