quartz-spring-boot-starter

quartz spring boot starter

License

License

Categories

Categories

Spring Boot Container Microservices Quartz Application Layer Libs Job Scheduling
GroupId

GroupId

com.fit2cloud.starters
ArtifactId

ArtifactId

quartz-spring-boot-starter
Last Version

Last Version

0.0.6
Release Date

Release Date

Type

Type

jar
Description

Description

quartz-spring-boot-starter
quartz spring boot starter
Project URL

Project URL

https://github.com/fit2cloud/quartz-spring-boot-starter
Source Code Management

Source Code Management

https://github.com/fit2cloud/quartz-spring-boot-starter

Download quartz-spring-boot-starter

How to add to project

<!-- https://jarcasting.com/artifacts/com.fit2cloud.starters/quartz-spring-boot-starter/ -->
<dependency>
    <groupId>com.fit2cloud.starters</groupId>
    <artifactId>quartz-spring-boot-starter</artifactId>
    <version>0.0.6</version>
</dependency>
// https://jarcasting.com/artifacts/com.fit2cloud.starters/quartz-spring-boot-starter/
implementation 'com.fit2cloud.starters:quartz-spring-boot-starter:0.0.6'
// https://jarcasting.com/artifacts/com.fit2cloud.starters/quartz-spring-boot-starter/
implementation ("com.fit2cloud.starters:quartz-spring-boot-starter:0.0.6")
'com.fit2cloud.starters:quartz-spring-boot-starter:jar:0.0.6'
<dependency org="com.fit2cloud.starters" name="quartz-spring-boot-starter" rev="0.0.6">
  <artifact name="quartz-spring-boot-starter" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.fit2cloud.starters', module='quartz-spring-boot-starter', version='0.0.6')
)
libraryDependencies += "com.fit2cloud.starters" % "quartz-spring-boot-starter" % "0.0.6"
[com.fit2cloud.starters/quartz-spring-boot-starter "0.0.6"]

Dependencies

compile (4)

Group / Artifact Type Version
org.springframework.boot : spring-boot-autoconfigure jar
org.springframework : spring-context-support jar
org.springframework.boot : spring-boot-configuration-processor Optional jar
org.quartz-scheduler : quartz jar 2.3.0

Project Modules

There are no modules declared in this project.

Quartz Spring Boot Starter

前言

涵盖范围:

  • 本工程对刚接触FIT2CLOUD的同学,以及具有多年经验的老司机都有用处。本工程致力于做到覆盖面广(尽量包括一切重要的内容),具体(给出最常见的具体的例子),以及简洁(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个技巧在特定情境下或是基本的,或是能显著节约时间。
  • 本文主要介绍工程的入门使用和注意事项。
  • 本文为 OS X 所写,并适用于 Windows 和 Linux 。

适用场景

  • 本文基于quartz定时任务进行处理,旨在简化定时任务配置时的繁琐操作。

日常使用

  • 工程必须是spring boot 工程否则无法使用。
  • 集群定时任务启动需要web容器和数据库的支持,各个数据库的DDL请自行下载http://www.quartz-scheduler.org/downloads/ 使用时请注意表名大小写的问题。
  • 将下面的代码复制到POM文件中指定的位置。
<dependency>
  <groupId>com.fit2cloud</groupId>
  <artifactId>quartz-spring-boot-starter</artifactId>
  <version>0.0.4</version>
</dependency>
  • 工程启动的配置文件application.properties中有定时任务的详细设置
# quartz enabled
quartz.enabled=true # 是否开启quartz
quartz.scheduler-name=testScheduler # 集群定时任务的唯一标识
  • 工程中代码只需要在 public method 中加上指定注解即可
@Service
public class CustomDemoJob {
    /**
     * 可以直接写表达式,也可以写配置文件里的key
     * 1/5 * * * * ?
     */
    @QuartzScheduled(cron = "${cron.expression.demo}", initialDelay = 1000 * 120)
    public void cronJob() throws Exception {
        System.out.println(Thread.currentThread() + "cronJob start " + new Date());
        Thread.sleep(10 * 1000);
        System.out.println(Thread.currentThread() + "cronJob end " + new Date());
    }  
    @QuartzScheduled(fixedDelay = 1000 * 5)
    public void fixedDealyJob() throws Exception {
        System.out.println(Thread.currentThread() + "fixedDealyJob start " + new Date());
        Thread.sleep(10 * 1000);
        System.out.println(Thread.currentThread() + "fixedDealyJob end " + new Date());  
    }
  
    @QuartzScheduled(fixedRate = 1000 * 5, initialDelay = 1000 * 120)
    public void fixedRateJob() throws Exception {
        System.out.println(Thread.currentThread() + "fixedRateJob start " + new Date());
        Thread.sleep(10 * 1000);
        System.out.println(Thread.currentThread() + "fixedRateJob end " + new Date());   
    }
    /**
    * 动态调整的定时任务
    * @param a 自定义参数 基本类型必须是包装类型
    * @param b 自定义参数 必须实现 java.io.Serializable 接口
    */
    public void task1(Integer a, String b) {
        System.out.printf("%d, %s\n", a, b);
    }
}
  • 测试动态调整的定时任务
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestQuartzManageService {
    @Resource
    private QuartzManageService quartzManageService;

    @Test
    public void testAddJob() throws Exception {
        quartzManageService.addJob("commonJob", "task1", "1/5 * * * * ?", 3, "test");
        Thread.sleep(1000 * 1000);
    } 
    
    @Test
    public void testDeleteJob() throws Exception {
        JobKey jobKey = quartzManageService.getJobKey(TriggerKey.triggerKey("commonJob" + "." + "task1"));
        quartzManageService.deleteJob(jobKey);
    }
}
  • 指定数据库连接池
@Bean
@QuartzDataSource // 指定 quartz 的数据库连接池
public DataSource optionalDataSource() throws Exception {
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setUser(env.getProperty("optional.rdb.user"));
    dataSource.setDriverClass(env.getProperty("optional.rdb.driver"));
    dataSource.setPassword(env.getProperty("optional.rdb.password"));
    dataSource.setJdbcUrl(env.getProperty("optional.rdb.url"));
    // todo 自行添加其他参数
    return dataSource;
}

注意事项

  • 本工程 0.0.1 版本不再维护
  • 本工程 0.0.2 版本基于JDK7编写,支持动态调整定时任务并指定参数执行修改了注解的名称和包路径
  • 本工程 0.0.3 版本基于JDK8编写,使用时请对照版本操作
  • 本工程 0.0.4 区分逻辑代码和 autoconfigure 配置
  • 本工程 0.0.5 可以配置 Thread pool count
  • 本工程 0.0.6 可以配置数据库连接池

Versions

Version
0.0.6