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

      

  • 相关阅读:
    硬盘
    [编译] 6、开源两个简单且有用的安卓APP命令行开发工具和nRF51822命令行开发工具
    [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP
    [Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO
    [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)
    [BlueZ] 2、使用bluetoothctl搜索、连接、配对、读写、使能notify蓝牙低功耗设备
    [BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B+
    [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)
    [ARCH] 1、virtualbox中安装archlinux+i3桌面,并做简单美化
    [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
  • 原文地址:https://www.cnblogs.com/chcha1/p/11274943.html
Copyright © 2011-2022 走看看