67,513
社区成员
发帖
与我相关
我的任务
分享
public class TestJobTask extends QuartzJobBean{
public void test1(){
System.out.println("*****************quartz Job************");
}
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
test1();
}
}
@SuppressWarnings({ "rawtypes" })
@Override
public String addJob(Map<String,String> params){
try {
String jobName = StringUtil.toString(params.get("jobName")).trim();
String jobGroupName = StringUtil.toString(params.get("jobGroupName")).trim();
String triggerName = StringUtil.toString(params.get("triggerName")).trim();
String triggerGroupName = StringUtil.toString(params.get("triggerGroupName")).trim();
String className = StringUtil.toString(params.get("className")).trim();
Class jobClass = Class.forName(className);
String description = StringUtil.toString(params.get("description")).trim();
String time = StringUtil.toString(params.get("time")).trim();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类
jobDetail.setDurability(true); //任务完成后任然将任务保存在数据库
// 触发器
jobDetail.setDescription(description);
CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
trigger.setDescription(description);
trigger.setCronExpression(time);// 触发器时间设定
trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);//任务超时不补充任务
scheduler.scheduleJob(jobDetail, trigger);
scheduler.pauseTrigger(triggerName, triggerGroupName);
return "200";
} catch (Exception e) {
e.printStackTrace();
return "500";
}
}
<property name="concurrent" value="false"/>
</bean>
但是这个方案实现的效果和上面相同,所有任务串行。@PersistJobDataAfterExecution @DisallowConcurrentExecution// 不允许并发执行 增加两个注解试试
串行可以自己实现,每个JOB在数据库维护一个状态位,执行前先去查询执行状态,若在执行中,则跳过或等待N秒再判断