java配置自动任务,定期执行代码
任务调用类:
1 package business.tools.service; 2 3 import java.util.ArrayList; 4 import java.util.Calendar; 5 import java.util.Date; 6 import java.util.List; 7 8 import org.apache.commons.logging.Log; 9 import org.apache.commons.logging.LogFactory; 10 import org.quartz.CronTrigger; 11 import org.quartz.Job; 12 import org.quartz.JobDetail; 13 import org.quartz.Scheduler; 14 import org.quartz.SchedulerException; 15 import org.quartz.SchedulerFactory; 16 import org.quartz.impl.StdSchedulerFactory; 17 18 import business.tools.model.SalesDataMonitor; 19 import framework.corenew.DateFormatException; 20 import framework.corenew.MyString; 21 import framework.corenew.QDateTime; 22 import framework.corenew.UniversalManager; 23 24 public class SalesDataMonitorManager extends UniversalManager{ 25 private transient final static Log log = LogFactory.getLog(SalesDataMonitorManager.class); 26 private static SchedulerFactory sf ; 27 public static synchronized SchedulerFactory getSf() { 28 if(sf==null){ 29 sf = new StdSchedulerFactory(); 30 } 31 return sf; 32 } 33 34 35 /** 36 * 保存销售数据范围时设定自动任务 37 * @param salesDataMonitor 38 * @throws Exception 39 */ 40 public void saveSalesMonitorJob(SalesDataMonitor salesDataMonitor) throws Exception{ 41 if(salesDataMonitor==null){ 42 return; 43 } 44 if("1".equals(salesDataMonitor.getType())){//如果type==1的不是监控范围数据 45 return; 46 } 47 48 List<String> formartTimes = getFormatTime(salesDataMonitor);//对象中包含的任务时间 49 if(formartTimes==null||formartTimes.size()==0){ 50 return; 51 } 52 53 removeJobs(salesDataMonitor.getId(), "salesDataMonitorGroup");//删除任务 54 55 for(String formartTime:formartTimes){ 56 String jobName = getJobName(salesDataMonitor, formartTime); 57 Job job = (Job)Class.forName("business.webservice.SalesDataMonitorJob").newInstance(); 58 Scheduler sched = getSf().getScheduler(); 59 JobDetail jobDetail = new JobDetail(jobName, "salesDataMonitorGroup", job.getClass()); 60 jobDetail.getJobDataMap().put("salesDataMonitorId", salesDataMonitor.getId()); 61 //触发器 62 CronTrigger trigger = new CronTrigger(jobName, "salesDataMonitorGroup"); 63 trigger.setCronExpression(formartTime);//触发器时间设定 64 sched.scheduleJob(jobDetail,trigger); 65 //启动 66 if(!sched.isShutdown()) 67 sched.start(); 68 69 log.info("===============================任务添加成功!"); 70 } 71 72 } 73 74 /** 75 * 拼出任务执行时间 76 * @param startTime 77 * @param endTime 78 * @param interval 79 * @return 80 * @throws DateFormatException 81 */ 82 private List<String> getFormatTime(SalesDataMonitor salesDataMonitor) throws Exception{ 83 List<String> strList = new ArrayList<String>(); 84 85 String catchDataType = salesDataMonitor.getCatchDataType();//抓取类型 86 if("1".equals(catchDataType)){ 87 String weekDayStr = "";//周几的字符串 88 String weekDays = salesDataMonitor.getWeekDays(); 89 if(MyString.isNoEmpty(weekDays)){ 90 String[] weekDaysArr = weekDays.split("~"); 91 for(int i=0;i<weekDaysArr.length;i++){ 92 if(MyString.isNoEmpty(weekDaysArr[i])){ 93 weekDayStr+=weekDaysArr[i]; 94 if(i<weekDaysArr.length-1){ 95 weekDayStr+=","; 96 } 97 } 98 99 } 100 } 101 102 String hoursAndMinutes = salesDataMonitor.getHoursAndMinutes(); 103 if(MyString.isNoEmpty(hoursAndMinutes)){ 104 String[] hoursAndMinutesArr = hoursAndMinutes.split("~"); 105 for(int i=0;i<hoursAndMinutesArr.length;i++){ 106 String[] hourAndMinuteArr = hoursAndMinutesArr[i].split(":"); 107 String hourStr = hourAndMinuteArr[0]; 108 String minuteStr = hourAndMinuteArr[1]; 109 110 StringBuffer formartTime = new StringBuffer(); 111 formartTime.append("0 "); 112 formartTime.append(minuteStr+" "); 113 formartTime.append(hourStr+" ? * "); 114 formartTime.append(weekDayStr);//周的表示 用MON-SUN或者1-7,不过注意:数字1是周日,2是周一,依次向下推 115 116 117 strList.add(formartTime.toString()); 118 119 } 120 } 121 }else if("2".equals(catchDataType)){ 122 try{ 123 String fixedTimes = salesDataMonitor.getFixedTimes(); 124 if(MyString.isNoEmpty(fixedTimes)){ 125 String[] fixedTimesArr = fixedTimes.split("~"); 126 for(int i=0;i<fixedTimesArr.length;i++){ 127 Date fixedTime = QDateTime.stringToDate(fixedTimesArr[i], "yyyy-MM-dd HH:mi"); 128 int compared = compareTimeToNow(fixedTime); 129 if(compared==1){ 130 throw new Exception("您填写的时间已过期,请核对!"); 131 } 132 String yearStr = QDateTime.dateToString(fixedTime, "yyyy"); 133 String monthStr = QDateTime.dateToString(fixedTime, "MM"); 134 String dateStr = QDateTime.dateToString(fixedTime, "dd"); 135 136 String hourStr = QDateTime.dateToString(fixedTime, "HH"); 137 String minStr = QDateTime.dateToString(fixedTime, "mi"); 138 139 StringBuffer formartTime = new StringBuffer(); 140 formartTime.append("0 ") ; 141 formartTime.append(minStr+" "); 142 formartTime.append(hourStr+" "); 143 formartTime.append(dateStr+" "); 144 formartTime.append(monthStr+" ? "); 145 formartTime.append(yearStr); 146 147 strList.add(formartTime.toString()); 148 149 } 150 } 151 }catch(Exception e){ 152 e.printStackTrace(); 153 } 154 } 155 156 log.info("自动任务触发时间:======"+strList.toString()); 157 return strList; 158 } 159 /** 160 * 一个日期和当前时间比较 161 * @param time 162 * @return 163 * @throws DateFormatException 164 */ 165 private int compareTimeToNow(Date time) throws DateFormatException{ 166 167 Calendar inTime = Calendar.getInstance(); 168 inTime.setTime(time); 169 170 Calendar nowTime = Calendar.getInstance(); 171 String currentTimeStr = QDateTime.dateToString(new Date(), "yyyy-MM-dd HH:mi"); 172 Date currentTime = QDateTime.stringToDate(currentTimeStr, "yyyy-MM-dd HH:mi"); 173 nowTime.setTime(currentTime); 174 175 int compared = nowTime.compareTo(inTime); 176 return compared; 177 } 178 179 180 private String getJobName(SalesDataMonitor salesDataMonitor,String formartTime) throws Exception{ 181 //拼出任务名字 182 StringBuffer jobName = new StringBuffer(); 183 jobName.append(salesDataMonitor.getId());//id 184 jobName.append("φ"); 185 jobName.append(salesDataMonitor.getBusinessType());//国际国内 186 jobName.append("φ"); 187 jobName.append(salesDataMonitor.getCarrierCode());//航空公司 188 jobName.append("φ"); 189 jobName.append(salesDataMonitor.getClasses());//舱位 190 jobName.append("φ"); 191 jobName.append(salesDataMonitor.getDepArea()+"-"+salesDataMonitor.getArrArea());//区域 192 jobName.append("φ"); 193 jobName.append(salesDataMonitor.getIsArrival());//是限定还是排除 194 jobName.append("φ"); 195 jobName.append(salesDataMonitor.getDeparture()+"-"+salesDataMonitor.getArrival());//限定和排除的机场三字码 196 jobName.append("φ"); 197 jobName.append(salesDataMonitor.getTourDateBegins()+"-"+salesDataMonitor.getTourDateEnds());//旅行时间 198 jobName.append("φ"); 199 jobName.append(salesDataMonitor.getEtdzBegins()+"-"+salesDataMonitor.getEtdzEnds());//出票时间 200 jobName.append("φ"); 201 jobName.append(salesDataMonitor.getCatchDataType());//抓取类型 202 jobName.append("φ"); 203 jobName.append(formartTime);//任务时间 204 205 return jobName.toString(); 206 } 207 208 public void removeJobs(String objectId,String groupName) throws SchedulerException{ 209 if(!MyString.isNoEmpty(objectId)){ 210 return; 211 } 212 Scheduler sched = getSf().getScheduler(); 213 String[] jobNames = sched.getJobNames(groupName); 214 if(jobNames==null||jobNames.length==0){ 215 return; 216 } 217 for(String jobName :jobNames){ 218 if(jobName.startsWith(objectId)){ 219 removeJob(jobName);//清除任务 220 } 221 } 222 223 224 } 225 /** 226 * 删除任务 227 * @param jobName 228 * @throws SchedulerException 229 */ 230 public static void removeJob(String jobName) 231 throws SchedulerException{ 232 Scheduler sched = getSf().getScheduler(); 233 sched.pauseTrigger(jobName,"salesDataMonitorGroup");//停止触发器 234 sched.unscheduleJob(jobName,"salesDataMonitorGroup");//移除触发器 235 sched.deleteJob(jobName,"salesDataMonitorGroup");//删除任务 236 log.info("删除任务成功!"); 237 } 238 }
任务类:Job
1 package business.webservice; 2 3 4 import java.util.Date; 5 6 import org.apache.commons.logging.Log; 7 import org.apache.commons.logging.LogFactory; 8 import org.quartz.Job; 9 import org.quartz.JobExecutionContext; 10 import org.quartz.JobExecutionException; 11 12 import business.tools.service.BookinfoManager; 13 import framework.corenew.QDateTime; 14 import framework.corenew.SpringUtil; 15 16 public class SalesDataMonitorJob implements Job{ 17 private transient final Log log = LogFactory.getLog(SalesDataMonitorJob.class); 18 19 public void execute(JobExecutionContext jobEC) throws JobExecutionException { 20 String currentTime = QDateTime.dateToString(new Date(), "yyyy-MM-dd HH:mi:ss"); 21 log.info("===================调用SalesDataMonitorJob时间 :"+currentTime+"====================="); 22 23 String salesDataMonitorId = (String)jobEC.getJobDetail().getJobDataMap().get("salesDataMonitorId"); 24 25 try { 26 BookinfoManager bookinfoManager = (BookinfoManager) SpringUtil.getBean("bookinfoManager"); 27 bookinfoManager.saveGroupBookInfoBySalesDataMonitor(salesDataMonitorId); 28 } catch (Exception e) { 29 e.printStackTrace(); 30 } 31 32 33 } 34 35 36 }
时间的格式拼法详见下章
转载于:https://www.cnblogs.com/jinzhiming/p/4775372.html
java配置自动任务,定期执行代码相关推荐
- java web 启动时执行_java Web 启动时自动执行代码的几种方式
Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...
- 微信跳一跳java实现自动跳_微信跳一跳辅助Java代码实现
微信跳一跳辅助的Java具体实现代码,供大家参考,具体内容如下 1.参考知乎教你用Python来玩微信跳一跳,鉴于本人Python一直都是半吊子水平,之前打算用python刷分,可无奈安装python ...
- javafx应用启动自动执行函数_一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式...
前言 有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在启动时检查与安装证书 ,诸如上述业务要求我们可能会经常碰到 Spring Boot 提供了至少 5 种 ...
- Eclipse配置自动提示(eclipse设置代码API自动出现)
新装了Eclipse,那肯定要配置Eclipse的自动提示.这里只是对API的自动提示. 约束等简单的自动提示进行配置.首先打开Eclipse的prefrences Java->Editor-& ...
- 找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...
作者 | 永远在路上[] 责编 | 胡巍巍 出品 | CSDN博客 线程线程的概念,百度是这样解释的:线程(英语:Thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际 ...
- quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码
一.QuickType 工具功能简介 QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script,C++,,Java,C#,Go 等)类型声明代码的工具. 例如我们在写 ...
- SpringBoot启动时实现自动执行代码的几种方式讲解
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u011291072/article/ details/81813662 前言 目前开发的SpringBoot项目在启动的时候需 ...
- 【264期】面试官问:Spring Boot 启动时自动执行代码方式有哪几种?解释一二!...
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 目前 ...
- 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试
文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...
- 如何让asp.net应用程序定时自动执行代码
asp.net程序一般是当用户请求一个Page,或者请求一个WebService的时候,才会执行一段代码,如果我们希望让程序定时自动执行代码,但是又不增加新的应用程序,应该怎么做呢? 首先,给你的we ...
最新文章
- 第四讲 deque
- Lesson 4.6 逻辑回归的手动实现
- B. 熟练剖分(tree) (概率DP)
- Terraform入门 - 4. destroy 基础设施
- 云服务能力评估“国标”出炉,腾讯云TStack首批通过私有云“一级能力”认证
- 图像纹理合成_EnhanceNet:通过自动纹理合成实现单图像超分辨率
- ds18b20温度转换指令_STM32接口DS18S20温度传感器
- 【[转】MySql模糊查询
- ikvm.net简介
- Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
- perl-我的第一个程序
- Office 与 Visio安装冲突
- 工业面阵相机与源型PLC和漏型PLC外部触发接线
- 黑客全军覆没 书生安全云实战各路高手
- vue cli关闭eslint语法检查
- Spark大数据分析案例之平均心率检测[2021]
- python绘制动态Julia集,超炫酷
- 2021超级好玩的VR游戏推荐,玩了还想玩
- 7.25~7.26 周末翻倍奖励——滴滴快车单
- Oracle数据库数据备份导出导入