明:本文为博主原创文章,未经博主允许不得转载。
[java] view plain copy
- /**
- * 添加任务到任务队列
- *
- * @param scheduleJob
- * @throws SchedulerException
- * @throws ClassNotFoundException
- */
- public ScheduleJob addJob(ScheduleJob job) throws SchedulerException, ClassNotFoundException {
- if (job == null || !ScheduleJob.STATUS_RUNNING.equals(job.getJobStatus())) {
- return null;
- }
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- log.debug(scheduler
- + ".......................................................................................add");
- TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
- CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
- // 不存在,创建一个
- if (null == trigger) {
- Class clazz = Class.forName(job.getBeanClass());
- JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(job.getJobName(), job.getJobGroup()).build();
- jobDetail.getJobDataMap().put("scheduleJob", job);
- CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
- trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())
- .withSchedule(scheduleBuilder).build();
- scheduler.scheduleJob(jobDetail, trigger);
- } else {
- // Trigger已存在,那么更新相应的定时设置
- CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
- // 按新的cronExpression表达式重新构建trigger
- trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
- // 按新的trigger重新设置job执行
- scheduler.rescheduleJob(triggerKey, trigger);
- }
- // 得到任务下一次的计划执行时间
- Date nextProcessTime = trigger.getNextFireTime();
- job.setNextProcessTime(nextProcessTime);
- return job;
- }
- /**
- * 服务器启动,加载job_status=1的任务到任务队列中
- *
- * @throws Exception
- */
- @PostConstruct
- public void init() throws Exception {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- // 这里获取任务信息数据
- List<ScheduleJob> jobList = scheduleJobMapper.getAllJobs();
- for (ScheduleJob job : jobList) {
- addJob(job);
- }
- }
- /**
- * 获取所有计划中的任务列表
- *
- * @return
- * @throws SchedulerException
- */
- @Deprecated
- public List<ScheduleJob> getAllJob() throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
- Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
- List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();
- for (JobKey jobKey : jobKeys) {
- List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
- for (Trigger trigger : triggers) {
- ScheduleJob job = new ScheduleJob();
- job.setJobName(jobKey.getName());
- job.setJobGroup(jobKey.getGroup());
- job.setDescription("触发器:" + trigger.getKey());
- Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
- job.setJobStatus(triggerState.name());
- if (trigger instanceof CronTrigger) {
- CronTrigger cronTrigger = (CronTrigger) trigger;
- String cronExpression = cronTrigger.getCronExpression();
- job.setCronExpression(cronExpression);
- }
- jobList.add(job);
- }
- }
- return jobList;
- }
- /**
- * 获取所有正在运行的job
- *
- * @return
- * @throws SchedulerException
- */
- @Deprecated
- public List<ScheduleJob> getRunningJob() throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();
- List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());
- for (JobExecutionContext executingJob : executingJobs) {
- ScheduleJob job = new ScheduleJob();
- JobDetail jobDetail = executingJob.getJobDetail();
- JobKey jobKey = jobDetail.getKey();
- Trigger trigger = executingJob.getTrigger();
- job.setJobName(jobKey.getName());
- job.setJobGroup(jobKey.getGroup());
- job.setDescription("触发器:" + trigger.getKey());
- Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
- job.setJobStatus(triggerState.name());
- if (trigger instanceof CronTrigger) {
- CronTrigger cronTrigger = (CronTrigger) trigger;
- String cronExpression = cronTrigger.getCronExpression();
- job.setCronExpression(cronExpression);
- }
- jobList.add(job);
- }
- return jobList;
- }
- /**
- * 暂停一个job
- *
- * @param scheduleJob
- * @throws SchedulerException
- */
- @Deprecated
- public void pauseJob(ScheduleJob scheduleJob) throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
- scheduler.pauseJob(jobKey);
- }
- /**
- * 恢复一个job
- *
- * @param scheduleJob
- * @throws SchedulerException
- */
- @Deprecated
- public void resumeJob(ScheduleJob scheduleJob) throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
- scheduler.resumeJob(jobKey);
- }
- /**
- * 删除一个job
- *
- * @param scheduleJob
- * @throws SchedulerException
- */
- public void deleteJob(ScheduleJob scheduleJob) throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
- scheduler.deleteJob(jobKey);
- }
- /**
- * 立即执行job
- *
- * @param scheduleJob
- * @throws SchedulerException
- */
- public void runAJobNow(ScheduleJob scheduleJob) throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
- scheduler.triggerJob(jobKey);
- }
- /**
- * 更新job时间表达式
- *
- * @param scheduleJob
- * @throws SchedulerException
- */
- public ScheduleJob updateJobCron(ScheduleJob scheduleJob) throws SchedulerException {
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
- CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
- CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());
- trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
- scheduler.rescheduleJob(triggerKey, trigger);
- // 得到任务下一次的计划执行时间
- Date nextProcessTime = trigger.getNextFireTime();
- scheduleJob.setNextProcessTime(nextProcessTime);
- return scheduleJob;
- }
[java] view plain copy
- Schdulejob实体类:
[java] view plain copy
- <pre name="code" class="java">public class ScheduleJob {
- public static final String STATUS_RUNNING = "1";
- public static final String STATUS_NOT_RUNNING = "0";
- private Long jobId;
- /**
- * 任务创建时间
- */
- private Date createTime;
- /**
- * 任务更新时间
- */
- private Date updateTime;
- /**
- * 上一次执行时间
- */
- private Date lastProcessTime;
- /**
- * 下次计划执行时间
- */
- private Date nextProcessTime;
- /**
- * 任务名称
- */
- private String jobName;
- /**
- * 任务分组
- */
- private String jobGroup;
- /**
- * 任务状态 是否启动任务
- */
- private String jobStatus;
- /**
- * cron表达式
- */
- private String cronExpression;
- /**
- * 描述
- */
- private String description;
- /**
- * 任务执行时调用哪个类的方法 包名+类名
- */
- private String beanClass;
- private List<JobParam> JobParamList;
- public Long getJobId() {
- return jobId;
- }
- public void setJobId(Long jobId) {
- this.jobId = jobId;
- }
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) throws ParseException {
- this.createTime = createTime;
- }
- public Date getUpdateTime() {
- return updateTime;
- }
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
- public String getJobName() {
- return jobName;
- }
- public void setJobName(String jobName) {
- this.jobName = jobName;
- }
- public String getJobGroup() {
- return jobGroup;
- }
- public void setJobGroup(String jobGroup) {
- this.jobGroup = jobGroup;
- }
- public String getJobStatus() {
- return jobStatus;
- }
- public void setJobStatus(String jobStatus) {
- this.jobStatus = jobStatus;
- }
- public String getCronExpression() {
- return cronExpression;
- }
- public void setCronExpression(String cronExpression) {
- this.cronExpression = cronExpression;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- public String getBeanClass() {
- return beanClass;
- }
- public void setBeanClass(String beanClass) {
- this.beanClass = beanClass;
- }
- public List<JobParam> getJobParamList() {
- return JobParamList;
- }
- public void setJobParamList(List<JobParam> jobParamList) {
- JobParamList = jobParamList;
- }
- public Date getNextProcessTime() {
- return nextProcessTime;
- }
- public void setNextProcessTime(Date nextProcessTime) {
- this.nextProcessTime = nextProcessTime;
- }
- public Date getLastProcessTime() {
- return lastProcessTime;
- }
- public void setLastProcessTime(Date lastProcessTime) {
- this.lastProcessTime = lastProcessTime;
- }
- }
来源:oschina
链接:https://my.oschina.net/u/2004245/blog/719266