java生成cron表達式


bean類:

package com.cst.klocwork.service.cron;

public class TaskScheduleModel {  
    
    
    /** 
        * 所選作業類型:  
        * 1  -> 每天  
        * 2  -> 每月  
        * 3  -> 每周 
        * 4  ->間隔(每隔2個小時,每隔30分鍾)
        */  
    Integer jobType;  
      
    /**一周的哪幾天*/  
    Integer[] dayOfWeeks;  
      
    /**一個月的哪幾天*/  
    Integer[] dayOfMonths;  
      
    /**秒  */  
    Integer second;  
      
    /**分  */  
    Integer minute;  
      
    /**時  */  
    Integer hour;     
  
    public Integer getJobType() {  
        return jobType;  
    }  
  
    public void setJobType(Integer jobType) {  
        this.jobType = jobType;  
    }  
      
    public Integer[] getDayOfWeeks() {  
        return dayOfWeeks;  
    }  
  
    public void setDayOfWeeks(Integer[] dayOfWeeks) {  
        this.dayOfWeeks = dayOfWeeks;  
    }     
  
    public Integer[] getDayOfMonths() {  
        return dayOfMonths;  
    }  
  
    public void setDayOfMonths(Integer[] dayOfMonths) {  
        this.dayOfMonths = dayOfMonths;  
    }  
  
    public Integer getSecond() {  
        return second;  
    }  
  
    public void setSecond(Integer second) {  
        this.second = second;  
    }  
  
    public Integer getMinute() {  
        return minute;  
    }  
  
    public void setMinute(Integer minute) {  
        this.minute = minute;  
    }  
  
    public Integer getHour() {  
        return hour;  
    }  
  
    public void setHour(Integer hour) {  
        this.hour = hour;  
    }  
      
      
}  

  util類:

/**  
 * @ClassName: CronUtil  
 * @Description: Cron表達式工具類  
 * 目前支持三種常用的cron表達式 
 * 1.每天的某個時間點執行 例:12 12 12 * * ?表示每天12時12分12秒執行 
 * 2.每周的哪幾天執行         例:12 12 12 ? * 1,2,3表示每周的周1周2周3 ,12時12分12秒執行 
 * 3.每月的哪幾天執行         例:12 12 12 1,21,13 * ?表示每月的1號21號13號 12時12分12秒執行 
 * @author  
 * @date  
 *  
 */    
public class CronUtil {    
        
        
      
    /**  
     *   
     *方法摘要:構建Cron表達式  
     *@param  taskScheduleModel  
     *@return String  
     */    
    public static String createCronExpression(TaskScheduleModel taskScheduleModel){    
        StringBuffer cronExp = new StringBuffer("");    
          
        if(null == taskScheduleModel.getJobType()) {  
            System.out.println("執行周期未配置" );//執行周期未配置  
        }  
          
        if (null != taskScheduleModel.getSecond()  
                && null != taskScheduleModel.getMinute()  
                && null != taskScheduleModel.getHour()) {    
            //秒    
            cronExp.append(taskScheduleModel.getSecond()).append(" ");    
            //分    
            cronExp.append(taskScheduleModel.getMinute()).append(" ");    
            //小時    
            cronExp.append(taskScheduleModel.getHour()).append(" ");    
                
            //每天    
            if(taskScheduleModel.getJobType().intValue() == 1){    
                cronExp.append("* ");//日  
                cronExp.append("* ");//月  
                cronExp.append("?");//周  
            }  
                
            //按每周    
            else if(taskScheduleModel.getJobType().intValue() == 3){    
                //一個月中第幾天    
                cronExp.append("? ");    
                //月份    
                cronExp.append("* ");    
                //周    
                Integer[] weeks = taskScheduleModel.getDayOfWeeks();    
                for(int i = 0; i < weeks.length; i++){    
                    if(i == 0){    
                        cronExp.append(weeks[i]);    
                    } else{    
                        cronExp.append(",").append(weeks[i]);    
                    }    
                }    
                    
            }    
                
            //按每月    
            else if(taskScheduleModel.getJobType().intValue() == 2){    
                //一個月中的哪幾天    
                Integer[] days = taskScheduleModel.getDayOfMonths();    
                for(int i = 0; i < days.length; i++){    
                    if(i == 0){    
                        cronExp.append(days[i]);    
                    } else{    
                        cronExp.append(",").append(days[i]);    
                    }    
                }    
                //月份    
                cronExp.append(" * ");    
                //周    
                cronExp.append("?");    
            }    
                
        }    
        else {  
            System.out.println("時或分或秒參數未配置" );//時或分或秒參數未配置  
        }  
        return cronExp.toString();    
    }    
        
    /**  
     *   
     *方法摘要:生成計划的詳細描述  
     *@param  taskScheduleModel  
     *@return String  
     */    
    public static String createDescription(TaskScheduleModel taskScheduleModel){    
        StringBuffer description = new StringBuffer("");    
        //計划執行開始時間    
//      Date startTime = taskScheduleModel.getScheduleStartTime();    
            
        if (null != taskScheduleModel.getSecond()  
                && null != taskScheduleModel.getMinute()  
                && null != taskScheduleModel.getHour()) {   
            //按每天    
            if(taskScheduleModel.getJobType().intValue() == 1){    
                description.append("每天");    
                description.append(taskScheduleModel.getHour()).append("時");    
                description.append(taskScheduleModel.getMinute()).append("分");    
                description.append(taskScheduleModel.getSecond()).append("秒");    
                description.append("執行");    
            }    
                
            //按每周    
            else if(taskScheduleModel.getJobType().intValue() == 3){    
                if(taskScheduleModel.getDayOfWeeks() != null && taskScheduleModel.getDayOfWeeks().length > 0) {    
                    String days = "";  
                    for(int i : taskScheduleModel.getDayOfWeeks()) {  
                        days += "周" + i;  
                    }  
                    description.append("每周的").append(days).append(" ");    
                }    
                if (null != taskScheduleModel.getSecond()  
                        && null != taskScheduleModel.getMinute()  
                        && null != taskScheduleModel.getHour()) {     
                    description.append(",");     
                    description.append(taskScheduleModel.getHour()).append("時");    
                    description.append(taskScheduleModel.getMinute()).append("分");    
                    description.append(taskScheduleModel.getSecond()).append("秒");   
                }    
                description.append("執行");    
            }    
                
            //按每月    
            else if(taskScheduleModel.getJobType().intValue() == 2){    
                //選擇月份    
                if(taskScheduleModel.getDayOfMonths() != null && taskScheduleModel.getDayOfMonths().length > 0) {    
                    String days = "";  
                    for(int i : taskScheduleModel.getDayOfMonths()) {  
                        days += i + "號";  
                    }  
                    description.append("每月的").append(days).append(" ");    
                }      
                description.append(taskScheduleModel.getHour()).append("時");    
                description.append(taskScheduleModel.getMinute()).append("分");    
                description.append(taskScheduleModel.getSecond()).append("秒");   
                description.append("執行");    
            }    
                
        }    
        return description.toString();    
    }  
      
    //參考例子  
    public static void main(String[] args) {  
        //執行時間:每天的12時12分12秒 start  
        TaskScheduleModel taskScheduleModel = new TaskScheduleModel();  
        taskScheduleModel.setJobType(1);//按每天  
        Integer hour = 12; //時  
        Integer minute = 12; //分  
        Integer second = 12; //秒  
        taskScheduleModel.setHour(hour);  
        taskScheduleModel.setMinute(minute);  
        taskScheduleModel.setSecond(second);  
        String cropExp = createCronExpression(taskScheduleModel);  
        System.out.println(cropExp + ":" + createDescription(taskScheduleModel));  
        //執行時間:每天的12時12分12秒 end  
          
        taskScheduleModel.setJobType(3);//每周的哪幾天執行  
        Integer[] dayOfWeeks = new Integer[3];  
        dayOfWeeks[0] = 1;  
        dayOfWeeks[1] = 2;  
        dayOfWeeks[2] = 3;  
        taskScheduleModel.setDayOfWeeks(dayOfWeeks);  
        cropExp = createCronExpression(taskScheduleModel);  
        System.out.println(cropExp + ":" + createDescription(taskScheduleModel));  
          
        taskScheduleModel.setJobType(2);//每月的哪幾天執行  
        Integer[] dayOfMonths = new Integer[3];  
        dayOfMonths[0] = 1;  
        dayOfMonths[1] = 21;  
        dayOfMonths[2] = 13;  
        taskScheduleModel.setDayOfMonths(dayOfMonths);  
        cropExp = createCronExpression(taskScheduleModel);  
        System.out.println(cropExp + ":" + createDescription(taskScheduleModel));  
          
    }  
}  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM