Solon

quartz-solon-plugin [弃用]

v2.7.1 </> markdown
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>quartz-solon-plugin</artifactId>
</dependency>

1、描述

调度扩展插件,基于 quartz 框架进行适配。提供了一个增强的注解 @Quartz,可以支持简化配置或者7段的cron配置。不支持毫秒级的调度。(建议换成:solon.scheduling.quartz

2、使用示例

// 启用 Quartz 注解的任务
@EnableQuartz
public class JobApp {
    public static void main(String[] args) {
        Solon.start(JobApp.class, args);
    }
}

// 基于 Runnable 接口的模式
@Quartz(cron7x = "2s" ,name = "job1")
public class QuartzRun1 implements Runnable {
    @Override
    public void run() {
        System.out.println("我是 QuartzRun1 (2s)");
    }
}

// 基于 Method 的模式(支持 JobExecutionContext 参数注入)
@Component
public class QuartzCom2  {
    @Quartz(cron7x = "10s")
    public void job2(JobExecutionContext jobContext) {
        System.out.println("我是 job2 (10s)");
    }
    
    @Quartz(cron7x = "0 0/1 * * * ? *")
    public void job3() {
        System.out.println("我是 job3 (0 0/1 * * * ? *)");
    }
}

3、通过应用配置,可以控制有name的任务

# solon.quartz.{job name} #要控制的job需要设置name属性
#
solon.quartz.job1:
  cron7x: 10s  #重新定义时间表达式
  enable: true #用任务进行启停控制

4、cron7x 支持的表达式

  • 或cron:支持7位(秒,分,时,日期ofM,月,星期ofW,年)
    • 例:0 0/1 * * * ? *
  • 或简配: s,m,h,d
    • 例:2s

5、增加持久化调试支持

  • quartz.properties (名字不能改)
#指定持久化方案
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.acquireTriggersWithinLock=true
org.quartz.jobStore.misfireThreshold=5000

#指定表前前缀(根据自己需要配置,表结构脚本官网找一下)
org.quartz.jobStore.tablePrefix=QRTZ_

#指定数据源(根据自己需要取名)
org.quartz.jobStore.dataSource=demo

org.quartz.dataSource.demo.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.demo.URL=jdbc:mysql://localhost:3306/quartz?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true
org.quartz.dataSource.demo.user=root
org.quartz.dataSource.demo.password=123456
org.quartz.dataSource.demo.maxConnections=10
org.quartz.datasource.demo.validateOnCheckout=true
org.quartz.datasource.demo.validationQuery=select 1

#指定线程池
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=5
org.quartz.threadPool.threadPriority=5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true

具体参考