Job的原理,参考:
http://www.cnblogs.com/Dorae/p/9357180.html
job的使用,参考:
https://blog.csdn.net/u010996565/article/details/78591054
https://blog.csdn.net/hfut_wowo/article/details/64434664
实例,创建一个job,每天凌晨3点执行:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.annotation.Resource;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class SumFinancialJob implements Job
{
public SumFinancialJob()
{
}
public void execute(JobExecutionContext context) throws JobExecutionException
{
//得到一个Calendar实例
Calendar calendar = Calendar.getInstance();
//calendar的日期设为今天
calendar.setTime(new Date());
//设置calendar为昨天
calendar.add(Calendar.DATE, -1);
//calendar.add(Calendar.YEAR, -1);//前一年
//calendar.add(Calendar.MONTH, -1);//前一月
Date yesterday = calendar.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//前一天的字符串
String pre = simpleDateFormat.format(yesterday);
//前一天凌晨0点的字符串
String startTime = pre.substring(0, 10) + " 00:00:00";
//前一天午夜24点的字符串
String endTime = pre.substring(0, 10) + " 24:00:00";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//获取前一天的日期字符串
String preDate = dateFormat.format(yesterday);
//获取外部传来的参数
//JobDataMap map = context.getJobDetail().getJobDataMap();
//String ywbDate = map.getString("ywbDate");
进行操作……
}
public static void schedulerJob()
{
try
{
// 创建一个jobDetail的实例 quartz 2.xx版本
JobDetail jobDetail = JobBuilder.newJob(SumFinancialJob.class).withIdentity("train-financial-Job").build();
// 创建一个Trigger触发器的实例,每天凌晨3点运行
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("train-financial-Trigger").startNow().withSchedule(CronScheduleBuilder.cronSchedule("0 0 3 * * ?")).build();
// 创建schedule实例
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 添加一个job
scheduler.scheduleJob(jobDetail, trigger);
// 开启一个job
scheduler.start();
}
catch (Exception e)
{
System.err.println("创建定时任务失败" + e);
}
}
}
job的使用实例参考:
(https://blog.csdn.net/u010996565/article/details/78591054 )
package com.qua.test;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import com.qua.job.PlanJob;
public class Test {
public static void main(String[] args) throws Exception {
//创建job
JobDetail detail=new JobDetail("myJob", "myGroup", PlanJob.class);
//向程序内部传入参数
JobDataMap map=detail.getJobDataMap();
map.put("username", "张三");
//这里的触犯器是规定的时间间隔内做的事,不是很常用
// //创建触发器
// SimpleTrigger trigger=new SimpleTrigger("myTrigger",SimpleTrigger.REPEAT_INDEFINITELY, 3000);
// //设置开始执行时间
// trigger.setStartTime(new Date(System.currentTimeMillis()+1000));
//下面这个是在指定时间做的事,在日常开发中是比较常用的
//指定时间
CronTrigger trigger=new CronTrigger("myCron", "myGroup", "40 10 11 * * ?");//这里有三个参数(1.触发器的名称2.触发器的组3.时间表达式)
//创建调度工厂
SchedulerFactory factory=new StdSchedulerFactory();
//创建调度器
Scheduler scheduler=factory.getScheduler();
//绑定job 和触发器
scheduler.scheduleJob(detail, trigger);
//启动
scheduler.start();
// //停止定时任务
// scheduler.shutdown();
}
}
Cron表示式示例
(https://blog.csdn.net/zzq900503/article/details/38020573/)
"0 0 12 * * ? "
每天12点运行
“0 15 10 ? * *”
每天10:15运行
“0 15 10 * * ?”
每天10:15运行
“0 15 10 * * ? *”
每天10:15运行
“0 15 10 * * ? 2008”
在2008年的每天10:15运行
“0 * 14 * * ?”
每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。
“0 0/5 14 * * ?”
每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。
“0 0/5 14,18 * * ?”
每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。
“0 0-5 14 * * ?”
每天14:00点到14:05,每分钟运行一次。
“0 10,44 14 ? 3 WED”
3月每周三的14:10分到14:44,每分钟运行一次。
“0 15 10 ? * MON-FRI”
每周一,二,三,四,五的10:15分运行。
“0 15 10 15 * ?”
每月15日10:15分运行。
“0 15 10 L * ?”
每月最后一天10:15分运行。
“0 15 10 ? * 6L”
每月最后一个星期五10:15分运行。
“0 15 10 ? * 6L 2007-2009”
在2007,2008,2009年每个月的最后一个星期五的10:15分运行。
“0 15 10 ? * 6#3”
每月第三个星期五的10:15分运行。