quartz定时器任务

2.定时器任务

用的是quartz调度工厂
其中涉及到cron表达式(定时器时间设置),cron表达式生成网址 http://cron.qqe2.com/

Quartz使用方法:
1.Job接口:TelegraphloadJob,需要继承job接口,并实现execute方法,实现同步任务
2.JobInstance:MyJobFactory中实现Job实例
3.Scheduler:MyScheduler,代表一个Quartz的独立运行容器,JobInstance可以注册到Scheduler中

1.配置文件:通过createJobInstance自动加载定时器任务

@Component
public class MyJobFactory extends AdaptableJobFactory {
	@Autowired
  private AutowireCapableBeanFactory capableBeanFactory;

  @Override
  protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
      // 调用父类的方法
      Object jobInstance = super.createJobInstance(bundle);
      // 进行注入
      capableBeanFactory.autowireBean(jobInstance);
      return jobInstance;
  }
}

2.设置启动项目

@Component
public class MyScheduler {
	@Autowired
	SchedulerFactoryBean schedulerFactoryBean;

	/**
	 * @函数名称:scheduleJobs
	 * @创建日期:2017年9月11日
	 * @功能说明:定义quartz调度工厂
	 * @参数说明:
	 * @返回说明:void
	 */
	public void scheduleJobs() throws SchedulerException {
		startJobs();
	}

	private void startJobs() throws SchedulerException {
		try {
			Object[] params = new Object[] {};
			// 运单
			QuartzManager.addJob(schedulerFactoryBean, "awbJob", "awbJob", "awbTrigger", "awbTrigger", 
					AwbJob.class, "0/30 * * * * ? *", params);
			
			// 运单删除
			QuartzManager.addJob(schedulerFactoryBean, "awbHistoryJob", "awbHistoryJob", "awbHistoryTrigger", "awbHistoryTrigger", 
					AwbHistoryJob.class, "0 0/1 * * * ? *", params);

			//电报信息
            QuartzManager.addJob(schedulerFactoryBean, "TelegraphUploadJob", "TelegraphUploadJob", "TelegraphUploadTrigger", "TelegraphUploadTrigger",
                    TelegraphUploadJob.class, "0 0/1 * * * ? *", params);
            

            
            // 议价申请及删除
            QuartzManager.addJob(schedulerFactoryBean, "awbBargainJob", "awbBargainJob", "awbBargainTrigger", "awbBargainTrigger",
          		  AwbBargainJob.class, "0 0/1 * * * ? *", params);
            
            // 航班走货明细存储过程-2分钟更新一次
            QuartzManager.addJob(schedulerFactoryBean, "ProcSyncLoadCancleJob", "ProcSyncLoadCancleJob", "ProcSyncLoadCancleTrigger", "ProcSyncLoadCancleTrigger",
            		ProcSyncLoadCancleJob.class, "0 0/2 * * * ? *", params);
            
            // 正在制单状态超过10分钟的电子托运书, 恢复成可制单
            QuartzManager.addJob(schedulerFactoryBean, "ShipEbookStatusJob", "ShipEbookStatusJob", "ShipEbookStatusTrigger", "ShipEbookStatusTrigger",
            		ShipEbookStatusJob.class, "0 0/10 * * * ? *", params);
            
            // 定时删除电子托运书无效数据 每天0点执行
            QuartzManager.addJob(schedulerFactoryBean, "ShipCheckJob", "ShipCheckJob", "ShipCheckTrigger", "ShipCheckTrigger",
            		ShipCheckJob.class, "0 0 0 * * ? *", params);
  
            // 统禁用OA中作废账号-每小时更新一次
            QuartzManager.addJob(schedulerFactoryBean, "UserAccountJob", "UserAccountJob", "UserAccountTrigger", "UserAccountTrigger",
            		UserAccountJob.class, "0 0 0/1 * * ? *", params);
            
            // 动态航班状态
            QuartzManager.addJob(schedulerFactoryBean, "ProcSyncFlightStatusJob", "ProcSyncFlightStatusJob", "ProcSyncFlightStatusTrigger", "ProcSyncFlightStatusTrigger",
            		ProcSyncFlightStatusJob.class, "0 0/5 * * * ? *", params);
            
            // 议价自动批复 每天0点执行
            QuartzManager.addJob(schedulerFactoryBean, "AutomaticBargainJob", "AutomaticBargainJob", "AutomaticBargainTrigger", "AutomaticBargainTrigger",
            		AutomaticBargainJob.class, "0 0 0 * * ? *", params);
            
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

3.配置启动

/**
 * @功能说明:
 * @创建人员:zhenghb
 * @变更记录:<BR>
 * 1、2017年9月2日 zhenghb 新建类
 */
@Configuration
public class SchedulerListener implements ApplicationListener<ContextRefreshedEvent> {

	@Autowired
  public MyScheduler myScheduler;
	
	@Autowired
  private MyJobFactory myJobFactory;
  @Override
  public void onApplicationEvent(ContextRefreshedEvent event) {
      try {
          myScheduler.scheduleJobs();
      } catch (SchedulerException e) {
          e.printStackTrace();
      }

  }

  @Bean
  public SchedulerFactoryBean schedulerFactoryBean(){
      SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
      schedulerFactoryBean.setStartupDelay(5);
      schedulerFactoryBean.setJobFactory(myJobFactory);
      return schedulerFactoryBean;
  }

}

4.进入正文:如何产生一个定时器任务?
详解析:1.首先service层与dao层定时上传
2.Job启动
3.MyScheduler 配置job

@DisallowConcurrentExecution
public class TelegraphUploadJob implements Job, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4729809338538061687L;
	private final Logger log = LoggerFactory.getLogger(getClass());
	@Autowired
	private ISyncTaskLogService syncTaskLogService;
	@Autowired
	private SyncTaskDao syncTaskDao;
	@Autowired
	private ITelegraphUploadService telegraphUploadService;
	/**
	 * 将电报同步到新地面系统
	 */
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		String msg = "同步成功!";
		SyncTaskLog syncTaskLog = new SyncTaskLog();
		log.info("开始同步电报信息数据");
		Date date = new Date();
		syncTaskLog.setStartTime(date);
		String msgs = "";
		// 判断服务是否启动
		Integer isEnable = syncTaskDao.getIsEnable(SyncTask.SYNCTELEINFO.getCode());
		if (isEnable != null && isEnable == 1) {
			try {
				//查询未同步和同步失败的数据
				List<TelegraphInfo> telegraphInfos = telegraphUploadService.findValidTele();
				for (TelegraphInfo tele : telegraphInfos) {
					if (StringUtils.isNotBlank(tele.getGoodsName())) {
						tele.setCneAddress(tele.getCneAddress().replaceAll("&quot;", "\"")
									.replaceAll("&lt;", "<")
									.replaceAll("&gt;", ">")
									.replaceAll("&#40;", "(")
									.replaceAll("&#41;", ")")
									.replaceAll("&#39;", "'"));
					}
					if (StringUtils.isNotBlank(tele.getUpdateInfo())) {
						tele.setUpdateInfo(tele.getUpdateInfo().replaceAll("&quot;", "\"")
									.replaceAll("&lt;", "<")
									.replaceAll("&gt;", ">")
									.replaceAll("&#40;", "(")
									.replaceAll("&#41;", ")")
									.replaceAll("&#39;", "'"));
					}
					if (StringUtils.isNotBlank(tele.getCneAddress())) {
						tele.setCneAddress(tele.getCneAddress().replaceAll("&quot;", "\"")
									.replaceAll("&lt;", "<")
									.replaceAll("&gt;", ">")
									.replaceAll("&#40;", "(")
									.replaceAll("&#41;", ")")
									.replaceAll("&#39;", "'"));
					}
					try {
						//上传至新地面系统
						msgs = telegraphUploadService.syncTelegraphInfo(tele);
					} catch (Exception e) {
						msgs = "同步失败!";
					}
					if ("同步失败!".equals(msgs)) {
						msg = msgs;
					}
				}
				log.info(msg);
			} catch (Exception e) {
				log.error(msg);
				e.printStackTrace();
				syncTaskLog.setException(e.toString());
			}
			date = new Date();
			syncTaskLog.setEndTime(date);
			if ("同步失败!".equals(msg)) {
				syncTaskLog.setSyncStatus(BoolStatus.N.getId());
			} else {
				syncTaskLog.setSyncStatus(BoolStatus.Y.getId());
			}
			syncTaskLog.setUpdateTime(date);
			syncTaskLog.setTaskCode(SyncTask.SYNCTELEINFO.getCode());
			try {
				syncTaskLogService.saveSyncTaskLog(syncTaskLog);
			} catch (Exception e) {
				log.error("同步电报信息错误", e);
				e.printStackTrace();
			}
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值