import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerBean;
import com.tdtech.eplatform.gatekeeper.listener.JobTriggerListener; public class QuartzCenter {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private QuartzUtil quartzUtil;
@Autowired
private Scheduler scheduler;
@Autowired
private JobTriggerListener jobTriggerListener; public String scheduleJob(Object targetObject, String targetMethod, int repeatCount, long repeatInterval, long startDelay) {
String jobName = quartzUtil.makeJobName(targetMethod);
try {
logger.info("scheduleJob jobname:"+jobName);
if(targetMethod != null && targetMethod.startsWith("run")){
scheduler.addTriggerListener(jobTriggerListener);

}
MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
jobDetailFactoryBean.setTargetObject(targetObject);
jobDetailFactoryBean.setTargetMethod(targetMethod);
jobDetailFactoryBean.setName(jobName);
jobDetailFactoryBean.setConcurrent(false);
jobDetailFactoryBean.afterPropertiesSet();
SimpleTriggerBean simpleTriggerBean = new SimpleTriggerBean();
simpleTriggerBean.setBeanName(quartzUtil.makeTriggerBeanName(targetMethod));
simpleTriggerBean.setRepeatCount(repeatCount);
simpleTriggerBean.setRepeatInterval(repeatInterval);
simpleTriggerBean.setStartDelay(startDelay);
simpleTriggerBean.afterPropertiesSet();
if(targetMethod!=null && targetMethod.startsWith("run"))
{
simpleTriggerBean.addTriggerListener("conTriggerListener");
}
scheduler.scheduleJob((JobDetail) jobDetailFactoryBean.getObject(), simpleTriggerBean); } catch (Exception e) {
jobName = null;
logger.error("scheduleJob failed!", e);
}
return jobName;
} public boolean terminateJob(String jobName) {
if (jobName == null) {
return false;
}
try {
return scheduler.deleteJob(jobName, null);
} catch (Exception e) {
logger.error("terminate job failed![jobName] is " + jobName, e);
}
return false;
}
}

JobTriggerListener 触发器

import java.util.Date;
import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.TriggerListener;
public class JobTriggerListener implements TriggerListener { @Override
public String getName() {
return "conTriggerListener";
} @Override
public void triggerComplete(Trigger arg0, JobExecutionContext arg1, int arg2) { Date d = arg1.getNextFireTime();
String jobName = arg1.getJobDetail().getName();
if (d == null && jobName!=null && jobName.startsWith("run")) {
Cleaner.getInstance().put(arg1.getJobDetail().getName());
}
} @Override
public void triggerFired(Trigger arg0, JobExecutionContext arg1) {
} @Override
public void triggerMisfired(Trigger arg0) {
} @Override
public boolean vetoJobExecution(Trigger arg0, JobExecutionContext arg1) {
return false;
} }

//生成线程名 uuid

import com.fasterxml.uuid.Generators;
import com.fasterxml.uuid.NoArgGenerator; public class QuartzUtil {
/**
* 使用UUID避免生成重复的名称
* 影响程序性能,毕竟字符串比较非常耗时
*/
private final NoArgGenerator uuidGenerator = Generators.randomBasedGenerator(); public String makeJobName(String customName) {
return customName + "_" + uuidGenerator.generate().toString();
} public String makeTriggerBeanName(String customName) {
return customName + "_" + uuidGenerator.generate().toString();
} }

//业务流程

    protected void disconnectChannel() {

           ...
String jobName = quartzCenter.scheduleJob(new CheckShouldCloseChannel(userDataIndex), "run", CHECK_CHANNEL_SHOULD_CLOSE_CNT - 1, 10000L, 10000L);
...
}

最新文章

  1. 四核exynos4412开发板使用网线上网注意事项
  2. 网页引用google字体速度慢:fonts.googleapis.com
  3. SAAS在中国市场的发展前景
  4. 中小公司PMO不一样期间的责任
  5. 【Web前端】---js调用本地应用程序
  6. MySql获取表的字段名称、字段注解、字段类型、字段长度
  7. linux常用命令:2权限管理命令
  8. WPF-控件-层级控件-Menu-嵌套结构
  9. Android Dialogs(6)Dialog类使用示例:用系统theme和用自定义的theme
  10. apparmor介绍
  11. JavaScript基础知识----六道有趣的Js基础题以及解答
  12. 一个博客总结的css常见的兼容性问题
  13. 如何给Ionic写一个cordova插件
  14. Entity Framework Core(EF Core) 最简单的入门示例
  15. python3+2 不换行打印,多用于进度条 process bar
  16. 在虚拟机上的ubuntu 1.6 系统中sudo apt-get失败的问题
  17. CSS实现元素水平垂直居中
  18. swift protocol 见证容器 虚函数表 与 动态派发
  19. Yahoo的Yslow23条规则
  20. docker打包centos增加中文支持

热门文章

  1. Springboot整合dubbo搭建基本的消费、提供和负载均衡
  2. 解决Keep-Alive 和 Close 不能使用此属性设置
  3. Java 基础 - 原生类型
  4. MySql学习笔记(一)之DQL常用查询
  5. UVA-11987-Almost Union-Find-并查集的基本操作合并、删除、移位
  6. HDU-1423-Greatest Common Increasing Subsequence-最长公共上升子序列【模版】
  7. sessionStorage 和 localStorage的区别
  8. day 66 Django基础二之URL路由系统
  9. day 60 Django基础七之Ajax
  10. MyBatis的核心API