原生quartz:
基本思路:
1.任务:创建一个实现Job接口的实现类(就是要具体做的事情,可以具体调用自己写的service)
定义一个Job,并绑定我们自己实现Job接口的实现类(例如通过JobBuilder的方式)
2.触发器:创建Trigger,并设置相关参数,如启动时间等。
3.调度器:通过工厂创建一个Scheduler
将job和trigger绑定到scheduler对象上,并启动
简易案例:
quartz层:
import java.io.File;
import java.io.IOException;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloWorldQuartz implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
File file2 = new File("*****/test/HelloJob1.java");
if (file2.exists()) {
System.out.println("存在文件夹或者文件");
} else {
try {
file2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
调用层:
//注意以下几个导入很重要
import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class TestQuartz {
public static void main(String[] args) throws Exception {
// First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
// computer a time that is on the next round minute
Date runTime = evenMinuteDate(new Date());
// define the job and tie it to our HelloJob class
JobDetail job = new JobDetail("ClaimVoucherMonthStatisticsQuartz", "group2", ClaimVoucherMonthStatisticsJob.class);
//JobDetail job = newJob(HelloWorld.class).withIdentity("job1", "group1").build();
// Trigger the job to run on the next round minute
// Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
SimpleTrigger simTrig = new SimpleTrigger("触发器名", SimpleTrigger.REPEAT_INDEFINITELY, 3000);
simTrig.setStartTime(new Date(System.currentTimeMillis()+1000));
//CronTrigger
//CronTrigger cronTrig;
//cronTrig = new CronTrigger("remindJob", "group2", "* * 11 * * ?");
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, simTrig);
// Start up the scheduler (nothing can actually run until the
// scheduler has been started)
sched.start();
// wait long enough so that the scheduler as an opportunity to
// run the job!
try {
Thread.sleep(10000);
// executing...
//关闭
sched.shutdown();
} catch (Exception e) {
//
}
}
}
spring和quartz整合:
applicationContext-xxx.xml配置:
代码:
//报表的任务调度
public class ClaimVoucherMonthStatisticsJob extends QuartzJobBean{
Logger logger = Logger.getLogger(this.getClass());
@Resource
private Biz_claim_voucherStatisticsService biz_claim_voucherStatisticsServiceImpl;
//注入Biz_claim_voucherStatisticsService业务逻辑层
public void setBiz_claim_voucherStatisticsServiceImpl(
Biz_claim_voucherStatisticsService biz_claim_voucherStatisticsServiceImpl) {
this.biz_claim_voucherStatisticsServiceImpl = biz_claim_voucherStatisticsServiceImpl;
}
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
//获得当前年和月
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH )+1;
biz_claim_voucherStatisticsServiceImpl.modifyMonthStatistics(year, month-1);
}