任务调用类:

  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配置自动任务,定期执行代码相关推荐

  1. java web 启动时执行_java Web 启动时自动执行代码的几种方式

    Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...

  2. 微信跳一跳java实现自动跳_微信跳一跳辅助Java代码实现

    微信跳一跳辅助的Java具体实现代码,供大家参考,具体内容如下 1.参考知乎教你用Python来玩微信跳一跳,鉴于本人Python一直都是半吊子水平,之前打算用python刷分,可无奈安装python ...

  3. javafx应用启动自动执行函数_一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式...

    前言 有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在启动时检查与安装证书 ,诸如上述业务要求我们可能会经常碰到 Spring Boot 提供了至少 5 种 ...

  4. Eclipse配置自动提示(eclipse设置代码API自动出现)

    新装了Eclipse,那肯定要配置Eclipse的自动提示.这里只是对API的自动提示. 约束等简单的自动提示进行配置.首先打开Eclipse的prefrences Java->Editor-& ...

  5. 找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...

    作者 | 永远在路上[] 责编 | 胡巍巍 出品 | CSDN博客 线程线程的概念,百度是这样解释的:线程(英语:Thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际 ...

  6. quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

    一.QuickType 工具功能简介 QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script,C++,,Java,C#,Go 等)类型声明代码的工具. 例如我们在写 ...

  7. SpringBoot启动时实现自动执行代码的几种方式讲解

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u011291072/article/ details/81813662 前言 目前开发的SpringBoot项目在启动的时候需 ...

  8. 【264期】面试官问:Spring Boot 启动时自动执行代码方式有哪几种?解释一二!...

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 目前 ...

  9. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  10. 如何让asp.net应用程序定时自动执行代码

    asp.net程序一般是当用户请求一个Page,或者请求一个WebService的时候,才会执行一段代码,如果我们希望让程序定时自动执行代码,但是又不增加新的应用程序,应该怎么做呢? 首先,给你的we ...

最新文章

  1. 第四讲 deque
  2. Lesson 4.6 逻辑回归的手动实现
  3. B. 熟练剖分(tree) (概率DP)
  4. Terraform入门 - 4. destroy 基础设施
  5. 云服务能力评估“国标”出炉,腾讯云TStack首批通过私有云“一级能力”认证
  6. 图像纹理合成_EnhanceNet:通过自动纹理合成实现单图像超分辨率
  7. ds18b20温度转换指令_STM32接口DS18S20温度传感器
  8. 【[转】MySql模糊查询
  9. ikvm.net简介
  10. Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
  11. perl-我的第一个程序
  12. Office 与 Visio安装冲突
  13. 工业面阵相机与源型PLC和漏型PLC外部触发接线
  14. 黑客全军覆没 书生安全云实战各路高手
  15. vue cli关闭eslint语法检查
  16. Spark大数据分析案例之平均心率检测[2021]
  17. python绘制动态Julia集,超炫酷
  18. 2021超级好玩的VR游戏推荐,玩了还想玩
  19. 7.25~7.26 周末翻倍奖励——滴滴快车单
  20. Oracle数据库数据备份导出导入

热门文章

  1. rs232读取智能电表_深度了解智能电度表,面板内容大揭秘!
  2. 普元EOS项目部署问题
  3. Android测试方法总结汇总
  4. 游戏开发如此简单?我直接创建了一个游戏场景【python 游戏实战 02】
  5. idea的tomcat改端口号_Tomcat修改端口
  6. 华为交换机基本配置命令明细
  7. lucene全文检索包括双层PDF
  8. 华为 C/C++ 编程规范(精华总结)
  9. 悼念毛星云(浅墨)老师
  10. 完全数(Perfect Number)