Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。术语”job schedule”似乎为不同的人提供了不同的想法。作业调度是负责执行(或通知)其他软件组件在预定时间执行的服务组件。介绍一下简单使用
1.导入Quartz jar包(若Maven项目,则pom.xml文件中引入quartz依赖)
2.Quartz属性配置文件:quartz.properties
#调度程序名称
org.quartz.scheduler.instanceName = DefaultScheduler
#初始化Id
org.quartz.scheduler.instanceId = auto
#线程池
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
3.编写Job类,实现org.quartz.Job接口
package com.ErpCoreWeb.Finance.importAcct;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Hello implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("调用线程:hello任务执行---"+sdf.format(new Date()));
}
}
4.使用job、trigger、schedule调用定时任务
引入静态方法
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
package com.ErpCoreWeb.Finance.importAcct;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest {
public static void main(String[] args) {
try {
// 从调度程序工厂获取一个调度程序的实例
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
System.out.println(scheduler.getSchedulerName());
// 实例创建是在scheduler安排任务触发执行时创建的
JobDetail job = newJob(Hello.class)
.withIdentity("job1","group1")
.build();
// 声明一个触发器,现在就执行(schedule.start()方法开始调用的时候执行);并且每间隔2秒就执行一次
Trigger trigger = newTrigger()
.withIdentity("trigger1","group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
// 告诉quartz使用定义的触发器trigger安排执行任务job
scheduler.scheduleJob(job, trigger);
// 启动任务调度程序,内部机制是线程的启动
scheduler.start();
// 关闭任务调度程序,如果不关闭,调度程序schedule会一直运行着
//scheduler.shutdown();
} catch (Exception e) {
// TODO: handle exception
}
}
}
每隔两秒钟触发一次时间,所以:
这是一个关于定时任务简单的demo
在项目中需要导账功能需要使用到定时任务,
配置scheduler.xml文件
<schedule>
<job>
<name>ImportAcctJob</name>
<group>group1</group>
<description>定时导账查询</description>
<job-class>com.ErpCoreWeb.Finance.importAcct.ImportAcctJob</job-class>
</job>
<trigger>
<cron>
<name>ImportAcctJob-trigger</name>
<job-name>ImportAcctJob</job-name>
<job-group>group1</job-group>
<cron-expression>0 0/5 * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
在com.ErpCoreWeb.Finance.importAcct.ImportAcctJob类实现implements Job接口,然后就和我们上面的实例是一样的,如果定时任务多的话一般配合多线程使用