| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dy.common.schedulerTask; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import org.quartz.*; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class SchedulerTaskSupport { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static Integer threadPoolMaxCount; | 
|---|
|  |  |  | private static Integer threadPoolPriority; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void setThreadPoolPro(Integer threadPoolMaxCount, Integer threadPoolPriority){ | 
|---|
|  |  |  | if(SchedulerTaskSupport.threadPoolMaxCount == null){ | 
|---|
|  |  |  | SchedulerTaskSupport.threadPoolMaxCount = threadPoolMaxCount; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(SchedulerTaskSupport.threadPoolPriority == null){ | 
|---|
|  |  |  | SchedulerTaskSupport.threadPoolPriority = threadPoolPriority; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 删除工作任务 | 
|---|
|  |  |  | * @param jobName | 
|---|
|  |  |  | * @param jobGroupName | 
|---|
|  |  |  | * @throws SchedulerException | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static void deleteJob(String jobName, String jobGroupName) throws SchedulerException{ | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler() ; | 
|---|
|  |  |  | sched.deleteJob(new JobKey(jobName, jobGroupName)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每X秒钟重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param futureSecond 延迟到将来时长(单位秒)以开始工作 | 
|---|
|  |  |  | * @param intervalInSeconds 重复工作间隔时长(秒) | 
|---|
|  |  |  | * @param repeatCount  重复工作次数(如果小于0,将一直重复执行下去 , 如果是0执行一次,如果是1执行2次,依次类推) | 
|---|
|  |  |  | * @return 工作任务Key | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addSecondlyJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int futureSecond, | 
|---|
|  |  |  | int intervalInSeconds , | 
|---|
|  |  |  | int repeatCount) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkDelayStart(futureSecond) ; | 
|---|
|  |  |  | if(intervalInSeconds < 1){ | 
|---|
|  |  |  | throw new Exception("重复工作间隔时长(单位秒)不能小于1秒)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date futureDate = DateBuilder.futureDate(futureSecond, DateBuilder.IntervalUnit.SECOND) ; | 
|---|
|  |  |  | Date startTime = DateBuilder.evenSecondDate(futureDate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .startAt(startTime) | 
|---|
|  |  |  | .withSchedule(SimpleScheduleBuilder.simpleSchedule() | 
|---|
|  |  |  | .withIntervalInSeconds(intervalInSeconds) | 
|---|
|  |  |  | .withRepeatCount(repeatCount)) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每X分钟重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param futureSecond 延迟到将来时长(单位秒)以开始工作 | 
|---|
|  |  |  | * @param intervalInMinutes 重复工作间隔时长(分钟) | 
|---|
|  |  |  | * @param repeatCount  重复工作次数(如果小于0,将一直重复执行下去 , 如果是0执行一次,如果是1执行2次,依次类推) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addMinutelyJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int futureSecond, | 
|---|
|  |  |  | int intervalInMinutes , | 
|---|
|  |  |  | int repeatCount) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkDelayStart(futureSecond) ; | 
|---|
|  |  |  | if(intervalInMinutes < 1){ | 
|---|
|  |  |  | throw new Exception("重复工作间隔时长(单位分钟)不能小于1分钟)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date futureDate = DateBuilder.futureDate(futureSecond, DateBuilder.IntervalUnit.SECOND) ; | 
|---|
|  |  |  | Date startTime = DateBuilder.evenSecondDate(futureDate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .startAt(startTime) | 
|---|
|  |  |  | .withSchedule(SimpleScheduleBuilder.simpleSchedule() | 
|---|
|  |  |  | .withIntervalInMinutes(intervalInMinutes) | 
|---|
|  |  |  | .withRepeatCount(repeatCount)) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每X小时重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param futureSecond 延迟到将来时长(单位秒)以开始工作 | 
|---|
|  |  |  | * @param intervalInHour 重复工作间隔时长(小时) | 
|---|
|  |  |  | * @param repeatCount  重复工作次数(如果小于0,将一直重复执行下去 , 如果是0执行一次,如果是1执行2次,依次类推) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addHourlyJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int futureSecond, | 
|---|
|  |  |  | int intervalInHour , | 
|---|
|  |  |  | int repeatCount) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkDelayStart(futureSecond) ; | 
|---|
|  |  |  | if(intervalInHour < 1){ | 
|---|
|  |  |  | throw new Exception("重复工作间隔时长(单位小时)不能小于1小时)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date futureDate = DateBuilder.futureDate(futureSecond, DateBuilder.IntervalUnit.SECOND) ; | 
|---|
|  |  |  | Date startTime = DateBuilder.evenSecondDate(futureDate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .startAt(startTime) | 
|---|
|  |  |  | .withSchedule(SimpleScheduleBuilder.simpleSchedule() | 
|---|
|  |  |  | .withIntervalInHours(intervalInHour) | 
|---|
|  |  |  | .withRepeatCount(repeatCount)) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每天某时某分重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param hour 某时(0-23之间(包括0与23)) | 
|---|
|  |  |  | * @param minute 某分(0-59之间(包括0与59)) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | //   表达式 意义 | 
|---|
|  |  |  | //   "0 0 12 * * ?" 每天中午12点触发 | 
|---|
|  |  |  | //   "0 15 10 ? * *" 每天上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 * * ?" 每天上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 * * ? *" 每天上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 | 
|---|
|  |  |  | //   "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 | 
|---|
|  |  |  | //   "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 | 
|---|
|  |  |  | //   "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 | 
|---|
|  |  |  | //   "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 | 
|---|
|  |  |  | //   "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 | 
|---|
|  |  |  | //   "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 15 * ?" 每月15日上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 L * ?" 每月最后一日的上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 | 
|---|
|  |  |  | //   "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addDailyJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int hour , | 
|---|
|  |  |  | int minute) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkHour(hour) ; | 
|---|
|  |  |  | SchedulerTaskSupport.checkMinute(minute) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " * * ? *")) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每周一、周二、周三、周四、周五各重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param hour 某时(0-23之间(包括0与23)) | 
|---|
|  |  |  | * @param minute 某分(0-59之间(包括0与59)) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addWorkingDayInWeekJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int hour , | 
|---|
|  |  |  | int minute) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkHour(hour) ; | 
|---|
|  |  |  | SchedulerTaskSupport.checkMinute(minute) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " ? * MON-FRI" )) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每一周的某一天某时某分重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param dayOfWeek 一周的某一天(1代表周一,依次类推)(取值1-7(包括1与7)) | 
|---|
|  |  |  | * @param hour 某时(0-23之间(包括0与23)) | 
|---|
|  |  |  | * @param minute 某分(0-59之间(包括0与59)) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addWeeklyJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int dayOfWeek, | 
|---|
|  |  |  | int hour , | 
|---|
|  |  |  | int minute) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkHour(hour) ; | 
|---|
|  |  |  | SchedulerTaskSupport.checkMinute(minute) ; | 
|---|
|  |  |  | dayOfWeek = SchedulerTaskSupport.checkDayOfWeek(dayOfWeek); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " ? * " + dayOfWeek )) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每月的某一天某时某分重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param dayOfMonth 一月的某一天(1-31之间(包括1与31)) | 
|---|
|  |  |  | * @param hour 某时(0-23之间(包括0与23)) | 
|---|
|  |  |  | * @param minute 某分(0-59之间(包括0与59)) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addMonthlyJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int dayOfMonth, | 
|---|
|  |  |  | int hour , | 
|---|
|  |  |  | int minute) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkHour(hour) ; | 
|---|
|  |  |  | SchedulerTaskSupport.checkMinute(minute) ; | 
|---|
|  |  |  | SchedulerTaskSupport.checkDayOfMonth(dayOfMonth); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " " + dayOfMonth + " * ?")) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加每月的最后一天某时某分重复工作一次的工作任务, | 
|---|
|  |  |  | * @param jobName 工作名称 | 
|---|
|  |  |  | * @param jobGroupName 工作组名称 | 
|---|
|  |  |  | * @param jobClass 工作类 | 
|---|
|  |  |  | * @param hour 某时(0-23之间(包括0与23)) | 
|---|
|  |  |  | * @param minute 某分(0-59之间(包括0与59)) | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @SuppressWarnings({"unchecked","rawtypes"}) | 
|---|
|  |  |  | public static String addLastDateOfMonthJob( | 
|---|
|  |  |  | String jobName, | 
|---|
|  |  |  | String jobGroupName, | 
|---|
|  |  |  | Class jobClass , | 
|---|
|  |  |  | HashMap<String , Object> jobDataMap , | 
|---|
|  |  |  | int hour , | 
|---|
|  |  |  | int minute) throws Exception { | 
|---|
|  |  |  | SchedulerTaskSupport.checkHour(hour) ; | 
|---|
|  |  |  | SchedulerTaskSupport.checkMinute(minute) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JobDetail job = JobBuilder.newJob(jobClass) | 
|---|
|  |  |  | .withIdentity(jobName, jobGroupName) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  | SchedulerTaskSupport.setDataMap(job, jobDataMap) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Trigger trigger = TriggerBuilder.newTrigger() | 
|---|
|  |  |  | .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") | 
|---|
|  |  |  | .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " L * ?")) | 
|---|
|  |  |  | .build(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sched.scheduleJob(job, trigger); | 
|---|
|  |  |  | sched.start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return job.getKey().toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 设置参数数据 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static void setDataMap(JobDetail job , HashMap<String , Object> jobDataMap){ | 
|---|
|  |  |  | if(jobDataMap != null && jobDataMap.size() > 0){ | 
|---|
|  |  |  | JobDataMap map = job.getJobDataMap(); | 
|---|
|  |  |  | Set<Map.Entry<String , Object>> set = jobDataMap.entrySet() ; | 
|---|
|  |  |  | Iterator<Map.Entry<String , Object>> it = set.iterator() ; | 
|---|
|  |  |  | Map.Entry<String , Object> entry = null ; | 
|---|
|  |  |  | String key = null ; | 
|---|
|  |  |  | Object value = null ; | 
|---|
|  |  |  | while(it.hasNext()){ | 
|---|
|  |  |  | entry = it.next() ; | 
|---|
|  |  |  | key = entry.getKey() ; | 
|---|
|  |  |  | value = entry.getValue() ; | 
|---|
|  |  |  | map.put(key, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param futureSecond | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static void checkDelayStart(int futureSecond)throws Exception { | 
|---|
|  |  |  | if(futureSecond < 0){ | 
|---|
|  |  |  | throw new Exception("延迟开始工作时长(单位秒)不能小于0!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param hour | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static void checkHour(int hour)throws Exception { | 
|---|
|  |  |  | if(hour < 0 || hour >= 24){ | 
|---|
|  |  |  | throw new Exception("重复工作的小时时间点取值必须在0-23之间(包括0与23)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param minute | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static void checkMinute(int minute)throws Exception { | 
|---|
|  |  |  | if(minute < 0 || minute >= 60){ | 
|---|
|  |  |  | throw new Exception("重复工作的分钟时间点取值必须在0-59之间(包括0与59)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param dayOfWeek | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static int checkDayOfWeek(int dayOfWeek)throws Exception { | 
|---|
|  |  |  | if(dayOfWeek < 1 || dayOfWeek > 7){ | 
|---|
|  |  |  | throw new Exception("重复工作的一星期的某一天取值必须在1(周一)-7(周日)间(包括1与7)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int d = 0 ; | 
|---|
|  |  |  | if(dayOfWeek == 1){ | 
|---|
|  |  |  | d = DateBuilder.MONDAY ; | 
|---|
|  |  |  | }else if(dayOfWeek == 2){ | 
|---|
|  |  |  | d = DateBuilder.TUESDAY ; | 
|---|
|  |  |  | }else if(dayOfWeek == 3){ | 
|---|
|  |  |  | d = DateBuilder.WEDNESDAY ; | 
|---|
|  |  |  | }else if(dayOfWeek == 4){ | 
|---|
|  |  |  | d = DateBuilder.THURSDAY ; | 
|---|
|  |  |  | }else if(dayOfWeek == 5){ | 
|---|
|  |  |  | d = DateBuilder.FRIDAY ; | 
|---|
|  |  |  | }else if(dayOfWeek == 6){ | 
|---|
|  |  |  | d = DateBuilder.SATURDAY ; | 
|---|
|  |  |  | }else if(dayOfWeek == 7){ | 
|---|
|  |  |  | d = DateBuilder.SUNDAY ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return d ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param dayOfMonth | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static void checkDayOfMonth(int dayOfMonth)throws Exception { | 
|---|
|  |  |  | if(dayOfMonth < 1 || dayOfMonth > 31){ | 
|---|
|  |  |  | throw new Exception("重复工作一月某一天取值必须在1-31之间(包括1与31)!") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|