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("", "获取定时任务名称出错!\n" + 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("交易控制定时任务更新出错!\n" + e.toString());
      }
    }
  }
}

 

posted @ 2016-03-02 11:13  残星  阅读(1373)  评论(0编辑  收藏  举报