zoukankan      html  css  js  c++  java
  • 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 }

    时间的格式拼法详见下章

     

  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/4775372.html
Copyright © 2011-2022 走看看