1、pom.xml 配置
2、加入jar
3、Java 代码书写
4、加载项配置
5、方法体书写
package com.dossp.ods.common.task;
import org.quartz.CronScheduleBuilder;
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;
import com.dossp.ods.common.util.ConfUtil;
public class QuartzUtil {
public static SchedulerFactory schedFact = new StdSchedulerFactory();
public static Scheduler sched;
public static final String GROUP = "time_work";
public static void startSched() throws SchedulerException {
try {
QuartzUtil.sched = QuartzUtil.schedFact.getScheduler();
QuartzUtil.sched.start();
} catch (Exception e) {
e.printStackTrace();
}
}
//出口申请待公示是否超出公示时间
public static boolean quartzAdd(String taskId) throws Exception {
try {
// 若sched未赋值或者未启动,则先在全局中启动它
if (QuartzUtil.sched == null || !QuartzUtil.sched.isStarted()) {
QuartzUtil.startSched();
}
// 定时规则,跟普通crontable的差不多
String rule = "0 0 " + ConfUtil.getProperty("FREQUENCY") + " * * ?";
// 设置组名,和任务名
String quartz_name = taskId;
String quartz_group = GROUP;
// 创建jobDetail实例,指定job名以及所属组
JobDetail jobDetail = JobBuilder.newJob(TasktJob.class).withIdentity(quartz_name, quartz_group).build();
jobDetail.getJobDataMap().put("taskId", taskId);
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(quartz_name, quartz_group).withSchedule(CronScheduleBuilder.cronSchedule(rule)).startNow().build();
QuartzUtil.sched.scheduleJob(jobDetail, trigger);
QuartzUtil.sched.start();
Thread.sleep(1000);
return true;
} catch (Exception e) {
System.out.println("[添加定时任务出错,任务号:" + taskId + "]");
e.printStackTrace();
return false;
}
}
//进口申请待公示是否超出公示时间
public static boolean quartiAdd(String taskId) throws Exception {
try {
// 若sched未赋值或者未启动,则先在全局中启动它
if (QuartzUtil.sched == null || !QuartzUtil.sched.isStarted()) {
QuartzUtil.startSched();
}
// 定时规则,跟普通crontable的差不多
String rule = "0 0 " + ConfUtil.getProperty("FREQUENCY") + " * * ?";
// 设置组名,和任务名
String quartz_name = taskId;
String quartz_group = GROUP;
// 创建jobDetail实例,指定job名以及所属组
JobDetail jobDetail = JobBuilder.newJob(TaskcJob.class).withIdentity(quartz_name, quartz_group).build();
jobDetail.getJobDataMap().put("taskId", taskId);
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(quartz_name, quartz_group).withSchedule(CronScheduleBuilder.cronSchedule(rule)).startNow().build();
QuartzUtil.sched.scheduleJob(jobDetail, trigger);
QuartzUtil.sched.start();
Thread.sleep(1000);
return true;
} catch (Exception e) {
System.out.println("[添加定时任务出错,任务号:" + taskId + "]");
e.printStackTrace();
return false;
}
}
//出口申请预计出口时间是否过期
public static boolean quartkAdd(String taskId) throws Exception {
try {
// 若sched未赋值或者未启动,则先在全局中启动它
if (QuartzUtil.sched == null || !QuartzUtil.sched.isStarted()) {
QuartzUtil.startSched();
}
// 定时规则,跟普通crontable的差不多
String rule = "0 0 " + ConfUtil.getProperty("FREQUENCY") + " * * ?";
// 设置组名,和任务名
String quartz_name = taskId;
String quartz_group = GROUP;
// 创建jobDetail实例,指定job名以及所属组
JobDetail jobDetail = JobBuilder.newJob(TaskkJob.class).withIdentity(quartz_name, quartz_group).build();
jobDetail.getJobDataMap().put("taskId", taskId);
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(quartz_name, quartz_group).withSchedule(CronScheduleBuilder.cronSchedule(rule)).startNow().build();
QuartzUtil.sched.scheduleJob(jobDetail, trigger);
QuartzUtil.sched.start();
Thread.sleep(1000);
return true;
} catch (Exception e) {
System.out.println("[添加定时任务出错,任务号:" + taskId + "]");
e.printStackTrace();
return false;
}
}
//进口申请预计出口时间是否过期
public static boolean quartjAdd(String taskId) throws Exception {
try {
// 若sched未赋值或者未启动,则先在全局中启动它
if (QuartzUtil.sched == null || !QuartzUtil.sched.isStarted()) {
QuartzUtil.startSched();
}
// 定时规则,跟普通crontable的差不多
String rule = "0 0 " + ConfUtil.getProperty("FREQUENCY") + " * * ?";
// 设置组名,和任务名
String quartz_name = taskId;
String quartz_group = GROUP;
// 创建jobDetail实例,指定job名以及所属组
JobDetail jobDetail = JobBuilder.newJob(TaskjJob.class).withIdentity(quartz_name, quartz_group).build();
jobDetail.getJobDataMap().put("taskId", taskId);
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(quartz_name, quartz_group).withSchedule(CronScheduleBuilder.cronSchedule(rule)).startNow().build();
QuartzUtil.sched.scheduleJob(jobDetail, trigger);
QuartzUtil.sched.start();
Thread.sleep(1000);
return true;
} catch (Exception e) {
System.out.println("[添加定时任务出错,任务号:" + taskId + "]");
e.printStackTrace();
return false;
}
}
}
6、具体实现
package com.dossp.ods.common.task;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class TaskjJob implements Job {
public static InitData initData = new InitData();
public static TaskkI taskkI = new TaskkI();
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
taskkI.queryI();
}
}
7、执行代码
package com.dossp.ods.common.task;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import com.dossp.ods.report.model.ImportApply;
import com.dossp.ods.workflow.dao.ApplyFlowDao;
public class TaskkI {
private static final ApplyFlowDao applyFlowDao = new ApplyFlowDao();
private static final String state = "'2'";
SimpleDateFormat sdf2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void queryI() {
try {
List<ImportApply> listI = applyFlowDao.getAllImportTaskS(state);
if (listI != null && listI.size() > 0) {
for (int i = 0; i < listI.size(); i++) {
String impPortTime=listI.get(i).getImportTime();
String endTime = sdf3.format(sdf2.parse(new Date().toString()));
long ant=this.getDaySub(impPortTime, endTime);
if(ant<=0){
int result = applyFlowDao.updatePortTimeState(listI.get(i).getAppNo(),"I");
if(result>0){
System.out.println("---待初审申请预计进口时间已过,申请已退回企业");
}else{
System.out.println("---状态表更新失败!--");
}
}else{
System.out.println("---没有超出时间的数据!--");
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public long getDaySub(String firstTime, String endDateStr) throws ParseException {
long day = 0;
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMdd");
java.util.Date beginDate;
java.util.Date endDate;
beginDate = format.parse(firstTime);
endDate = format.parse(endDateStr);
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
}