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/4350.html

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

相关推荐

发表回复

登录后才能评论