Quartz 入门

内容预览:
  • 大概了解一下quartz的使用~
  • 简单调用 1、导入 Quartz 的jar包,官网有zip文件可供下载,maven 项目...~
  • 两个任务可以同时调度~

简介

可以用来创建执行数十,数百乃至数万个作业的简单或复杂的计划;开源的完全使用JAVA开发的一种时间调度框架,可多线程同步执行。支持集群、JTA事务(听着好高大上,说白了就是定时器~,与以往不同的是,他支持大量的定时任务同步执行,还可以将定时信息保存到数据库中在需要的时候在开启执行,可以防止数据丢失,也可以随时查看定时任务的信息)

使用

quartz 下载地址: http://www.quartz-scheduler.org/downloads/ 

quartz有两种使用方式:RAM、JDBC。任务的调度也有两种方式:SimpleSchedule、CronSchedule

如果需要使用 JDBC模式需要下载官方的资料,进入 quartz-2.2.3 / docs / dbTables 里面有所有的 sql 文件,可以执行具体的 sql 生成需要的数据表,数据表只有在使用 JDBC 模式的情况下才有效,在使用JDBC的时候还要配置 jdbc 驱动 用户名,密码等信息,具体信息以后再记录。这里只是初步的记录下quartz的使用。大概了解一下quartz的使用。

简单调用

1、导入 Quartz 的jar包,官网有zip文件可供下载,maven 项目则需要导入依赖

    <!-- quartz begin -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<!-- quartz end -->

<!-- log -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>

2、创建 quartz.properties  文件放到 classpath 中

#JDBC驱动
#org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
#org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/test
#org.quartz.dataSource.qzDS.user:root
#org.quartz.dataSource.qzDS.password:
#org.quartz.dataSource.qzDS.maxConnection:10

org.quartz.scheduler.instanceName=MyScheduler
org.quartz.threadPool.threadCount=3
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore

3、创建具体的任务

package com.quartz.first;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {

private static final String NAME = "name";

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {

System.out.println(
" execute job() ... ");
}

}

调用

package com.quartz.first;

import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

/**
*
* 使用 RAM 方式定时
*
*
@author 丰志
*
*/
public class RAMQuartz {

public static void main(String[] args) throws SchedulerException {
//1.创建Scheduler的工厂
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
//2.从工厂中获取调度器实例
Scheduler scheduler = schedulerFactory.getScheduler();
//3.创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withDescription(
"this is a ram job") //job的描述
.withIdentity("ramJob", "ramGroup") //job 的name和group
.build();

// jobDetail.getJobDataMap().put("name", "zhangsan"); //传参用与MyJob中获取参数 jobDataMap.get("name")

//任务运行的时间,SimpleSchedle类型触发器有效
long time= System.currentTimeMillis() + 3*1000L; //3秒后启动任务
Date statTime = new Date(time);

//4.创建Trigger
//使用SimpleScheduleBuilder或者CronScheduleBuilder
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription(
"")
.withIdentity(
"ramTrigger", "ramTriggerGroup")
.startAt(statTime)
//默认当前时间启动
// .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(10)) // 每个2秒钟执行一次,一共执行10次
// .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次,cron 秒、分、时、日、月、年、
.build();

//5.注册任务和定时器
scheduler.scheduleJob(jobDetail, trigger);
//6.启动 调度器
scheduler.start();
}
}

 结果:

到此就实现了基本的调度任务,但是在实际项目中往往需要用到quartz跟一些开发框架的集成

spring集成quartz

   使用spring框架来管理quartz可以使开发变得简单,只需要书写具体的任务即可,因为不在需要写JAVA代码来开启任务,spring会根据配置文件中的配置自动开启省去了手写的调度过程。具体实现:

1、添加 spring 支持(添加之前的依赖):

<dependency>                                
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>$</version>
</dependency>

2、创建具体的任务

Simple方式:

package org.quartz.demo;

import java.util.Date;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SimpleJob extends QuartzJobBean {

@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(
"------ 执行ExampleJob -------" + new Date());
}
}

Cron方式:

package org.quartz.demo;

import java.util.Date;

public class CronJob {

public void doIt() {
System.out.println(
"====== 执行 ExampleBusinessObject.doIt... ======" + new Date());
}
}

3、配置 spring-quartz.xml 文件:

spring 的applicationContext.xml文件中添加quartz:

<import resource="classpath:conf/spring-quartz.xml" />

配置 spring-quartz.xml

Simple方式:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"
>

<!-- 具体执行的任务 -->
<bean name="simpleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="org.quartz.demo.SimpleJob"/>
</bean>

<!-- Simple触发器 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="simpleJob"/>
<property name="startDelay" value="50000"/>
<property name="repeatInterval" value="5000"/>
</bean>

<!-- 调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
</bean>

</beans>

Cron方式:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"
>

<!-- 具体的任务 -->
<bean id="cronJob" class="org.quartz.demo.CronJob"/>

<!-- JobDetail -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="cronJob"/>
<property name="targetMethod" value="doIt"/>
</bean>

<!-- Cron触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="cronExpression" value="10 * * * * ?"/>
</bean>

<!-- 调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>

</beans>

启动 tomcat 测试结果

Cron.doIt 每分钟的第 10 秒执行一次, SimpleJob 每 5 秒钟执行一次。两个任务可以同时调度。测试通过~

Quartz官方介绍:  http://www.quartz-scheduler.org/documentation/quartz-2.2.x/quick-start.html

Spring官方文档介绍集成 Quartz 地址:https://docs.spring.io/spring/docs/4.3.17.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/

最后:欢迎吐槽~ 

 

以上就是:Quartz 入门 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论