• 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 }

    时间的格式拼法详见下章

     

  • 相关阅读:
    HDUOJ---Can you solve this equation?
    HDUOJ---A + B Again
    C++知识整理(进制)
    位运算的方法,大结
    位运算的方法,小结
    C++知识整理(在此感谢大牛的整理)
    nyoj---快速查找素数
    HDUOJ----湫湫系列故事——减肥记I
    《道德经》:十条简洁有用的人生建议
    Nginx的几个常用配置和技巧
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/4775372.html
Copyright © 2020-2023  润新知