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()); 
      } 
    } 
  } 
}

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/database/4350.html

(0)
上一篇 2021年7月16日 21:49
下一篇 2021年7月16日 21:49

相关推荐

发表回复

登录后才能评论