zoukankan      html  css  js  c++  java
  • Java 定时任务

    control 类

     Date nowDate = new Date();
              SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              
              String jobName = lwhbh + "_" + jydm + "_" + jybs + "_"+ cldm + "_bz";
              
              
              if ((openTime != null) && (!openTime.equals(""))){
                  openTime = openTime.trim();
                  TaskManage task = new TaskManage(BcpJyctrlTask.class);
                  task.addTask(this.datasource, openTime, jobName + "_" + openTime, "bcpJyctrl", null);
                  
                  YwBcpJyctrlTime jyct = new YwBcpJyctrlTime();
                  jyct.setLwhbh(lwhbh);
                  jyct.setJydm(jydm);
                  jyct.setJybs(jybs);
                  jyct.setCldm(cldm);
                  jyct.setYwlx(ywlx);
                  jyct.setJymc(jymc);
                  jyct.setGxrq(gxrq);
                  jyct.setKtbz("1");// 1-开通
                  jyct.setSdsj(df.format(nowDate));
                  jyct.setYxsj(openTime);
                  jyct.setYxzt("0");// 0-待执行
                  
                  saveObj(jyct);
              }

    TaskManage.java

    import hs.util.HsException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Set;
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.JobBuilder;
    import org.quartz.JobDataMap;
    import org.quartz.JobDetail;
    import org.quartz.JobKey;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.matchers.GroupMatcher;
    
    public class TaskManage {
        private Class taskClass;
        public static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
        public static final int WAITTIME = 10;
    
        public TaskManage(Class taskClass) {
            this.taskClass = taskClass;
        }
    
        private Scheduler getScheduler() throws SchedulerException {
            return SchedulerManage.getSchedulerFactory().getScheduler();
        }
    
        public void addJob(String jobName, String groupName, String cronSchedule, Object obj, String datasource) throws SchedulerException {
            JobDetail jobDetail = JobBuilder.newJob(this.taskClass).withIdentity("job-" + jobName, "job-" + groupName).build();
    
            CronTrigger cronTrigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("tri-" + jobName, "tri-" + groupName)
                    .withSchedule(CronScheduleBuilder.cronSchedule(cronSchedule)).build();
    
            jobDetail.getJobDataMap().put("obj", obj);
            jobDetail.getJobDataMap().put("datasource", datasource);
    
            getScheduler().scheduleJob(jobDetail, cronTrigger);
        }
    
        public void deleteTask(String jobName, String groupName) throws SchedulerException {
            getScheduler().deleteJob(new JobKey("job-" + jobName, "job-" + groupName));
        }
    
        public boolean judgeIsTaskLive(String jobName, String groupName) throws SchedulerException {
            return getScheduler().checkExists(new JobKey("job-" + jobName, "job-" + groupName));
        }
    
        public void addTask(String datasource, String taskTime, String jobName, String groupName, Object obj) throws HsException {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            try {
                Date nowDate = new Date();
                if ((taskTime != null) && (!taskTime.equals(""))) {
                    Date openDate = df.parse(taskTime);
                    if (openDate.getTime() < nowDate.getTime() + 10L) {
                        throw new HsException("", "设定的定时时间小于或等于当前系统时间,请重新设定!");
                    }
                    if (judgeIsTaskLive(jobName, groupName)) {
                        deleteTask(jobName, groupName);
                    }
    
                    StringBuffer cronSchedule = new StringBuffer();
    
                    cronSchedule.append(taskTime.substring(17));
                    cronSchedule.append(" ");
                    cronSchedule.append(taskTime.substring(14, 16));
                    cronSchedule.append(" ");
                    cronSchedule.append(taskTime.substring(11, 13));
                    cronSchedule.append(" ");
                    cronSchedule.append(taskTime.substring(8, 10));
                    cronSchedule.append(" ");
                    cronSchedule.append(taskTime.substring(5, 7));
                    cronSchedule.append(" ");
                    cronSchedule.append("?");
                    cronSchedule.append(" ");
                    cronSchedule.append(taskTime.substring(0, 4));
    
                    addJob(jobName, groupName, cronSchedule.toString(), obj, datasource);
                }
    
            } catch (ParseException e) {
                throw new HsException("", "设定定时时间格式错误!");
            } catch (SchedulerException e) {
                e.printStackTrace();
                throw new HsException("", "定时任务设定出错!");
            }
        }
    
        public Set getJobNameByGroupName(String groupName) throws HsException {
            try {
                return getScheduler().getJobKeys(GroupMatcher.jobGroupEquals("job-" + groupName));
            } catch (SchedulerException e) {
                throw new HsException("", "获取定时任务名称出错!
    " + e.getMessage());
            }
        }
    }

    TaskJob.java

    import com.hundsun.log.HsLogger;
    import com.hundsun.tamc.base.BeanFactoryUtil;
    import com.hundsun.tamc.base.HibernateDaoBS;
    import java.io.PrintStream;
    import java.util.Date;
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobDetail;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public abstract class TaskJob implements Job {
        public static final String OBJ_NAME = "obj";
        public static final String DATASOURCE_NAME = "datasource";
        protected JobDataMap jobDataMap;
        protected HibernateDaoBS baseHibernate;
    
        public HibernateDaoBS getHibernateDaoBS(String datasource) {
            HibernateDaoBS baseHibernate = (HibernateDaoBS) BeanFactoryUtil.getBean(datasource, "hibernateBSProxy");
            return baseHibernate;
        }
    
        public void execute(JobExecutionContext jobCtx) throws JobExecutionException {
            HsLogger.getInstance().writeInfo("【定时任务:开始】");
            System.out.println("【定时任务:开始】" + new Date().toLocaleString());
            HsLogger.getInstance().writeInfo(jobCtx.getJobDetail().getKey() + " triggered. time is:" + new Date());
            this.jobDataMap = jobCtx.getJobDetail().getJobDataMap();
            String datasource = (String) this.jobDataMap.get("datasource");
            this.baseHibernate = getHibernateDaoBS(datasource);
            body(jobCtx);
            HsLogger.getInstance().writeInfo("【定时任务:结束】");
            System.out.println("【定时任务:结束】" + new Date().toLocaleString());
        }
    
        public abstract void body(JobExecutionContext paramJobExecutionContext) throws JobExecutionException;
    }
    BcpJyctrlTask.java
    import com.hundsun.log.HsLogger;
    import com.hundsun.tamc.control.app.timetask.sys.TaskJob;
    import com.hundsun.tamc.hibernate.app.bcp.YwBcpJyctrlTime;
    
    import hs.util.HsException;
    
    import java.util.List;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class BcpJyctrlTask extends TaskJob
    {
      @SuppressWarnings("rawtypes")
    public void body(JobExecutionContext jobCtx)
        throws JobExecutionException
      {
        String jobName = jobCtx.getJobDetail().getKey().getName();
        String yxzt = "1";
    
        String yxsj = "";
        String lwhbh = "";
        String jydm = "";
        String jybs = "";
        String cldm = "";
        StringBuffer sqlTemp;
        try
        {
          String[] ywbz = jobName.substring(4, jobName.length() - 20).split("_");
          yxsj = jobName.substring(jobName.length() - 19);
          lwhbh = ywbz[0];
          jydm = ywbz[1];
          jybs = ywbz[2];
          cldm = ywbz[3];
    
          StringBuffer ywStr = new StringBuffer();
          ywStr.append("from YwBcpJyctrlTime where yxzt='0' and jydm='");
          ywStr.append(jydm);
          ywStr.append("' and lwhbh='");
          ywStr.append(lwhbh);
          ywStr.append("' and jybs='");
          ywStr.append(jybs);
          ywStr.append("' and cldm='");
          ywStr.append(cldm);
          ywStr.append("' and yxsj='");
          ywStr.append(yxsj);
          ywStr.append("'");
          List list = this.baseHibernate.findObjs(ywStr.toString());
          YwBcpJyctrlTime jyctrlTime;
          if ((list != null) && (list.size() > 0)){
              jyctrlTime = (YwBcpJyctrlTime)list.get(0);
          }else{
            throw new HsException("ERR_DEFAULT", "交易控制未找到可运行的定时任务!");
          }
          StringBuffer sql = new StringBuffer("update YwBcpJyctrl set ktbz='");
          sql.append(jyctrlTime.getKtbz());
          sql.append("' where jydm='");
          sql.append(jyctrlTime.getJydm());
          sql.append("' and lwhbh='");
          sql.append(jyctrlTime.getLwhbh());
          sql.append("' and jybs='");
          sql.append(jyctrlTime.getJybs());
          sql.append("' and cldm='");
          sql.append(jyctrlTime.getCldm());
          sql.append("'");
          this.baseHibernate.exeHQL(sql.toString());
        }catch (HsException e) {
          e.printStackTrace();
          yxzt = "3";
        }catch (Exception e)
        {
          e.printStackTrace();
          yxzt = "3";
        }
        finally
        {
          sqlTemp = new StringBuffer();
          sqlTemp.append("update YwBcpJyctrlTime set yxzt='" + yxzt + "' where yxzt='0' and jydm='");
          sqlTemp.append(jydm);
          sqlTemp.append("' and lwhbh='");
          sqlTemp.append(lwhbh);
          sqlTemp.append("' and jybs='");
          sqlTemp.append(jybs);
          sqlTemp.append("' and cldm='");
          sqlTemp.append(cldm);
          sqlTemp.append("' and yxsj='");
          sqlTemp.append(yxsj);
          sqlTemp.append("'");
          try {
            this.baseHibernate.exeHQL(sqlTemp.toString());
          } catch (HsException e) {
            HsLogger.getInstance().writeInfo("交易控制定时任务更新出错!
    " + e.toString());
          }
        }
      }
    }
  • 相关阅读:
    Arthas(阿尔萨斯)学习记录
    Apache Flume 学习记录
    XA 协议 学习记录
    Federation(联邦) 架构
    服务注册与发现 Consul Consultemplate
    稳态&敏态
    分布式事务 方案对比
    TongWeb
    tensorflow学习011——Dropout抑制过拟合
    tensorflow学习014——tf.data运用实例
  • 原文地址:https://www.cnblogs.com/mingforyou/p/5234161.html
Copyright © 2011-2022 走看看