IT-KIMI_SHI\SINOIT.KIMI
2018-12-07 50eb1d766c470dc6ff927199eaee934f972a8b70
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package service.quartz.impl;
 
import org.quartz.*;
import org.quartz.Trigger;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.springframework.stereotype.Service;
import service.quartz.QuartzService;
 
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
 
/**
 * Created by ct on 2016/11/23.
 */
@Service
public class QuartzServiceImpl implements QuartzService {
 
    @Resource
    private Scheduler quartzScheduler;
 
    @Override
    public void addJob(Class<? extends Job> myJob, String jobName, String jobGroup , Trigger trigger, Map<String, Object> param) throws Exception {
        JobDataMap jobDataMap = new JobDataMap(param);
        JobDetail jobDetail = JobBuilder.newJob(myJob).withIdentity(jobName ,jobGroup).setJobData(jobDataMap).build();
        quartzScheduler.scheduleJob(jobDetail, trigger);
    }
 
    @Override
    public void startJobs() throws Exception {
        if(!quartzScheduler.isStarted()){
            quartzScheduler.start();
        }
    }
 
    @Override
    public void stopJobs() throws Exception {
        if (!quartzScheduler.isShutdown()) {
            quartzScheduler.shutdown();
        }
    }
 
    @Override
    public Trigger generateTrigger(String startTime, String period, String triggerName, String triggerGroup) throws Exception {
        Date startAt = null;
        int roundHours = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date nowTime = sdf.parse(sdf.format(new Date()));
        if(sdf.parse(startTime).getTime() > nowTime.getTime() || sdf.parse(startTime).getTime() == nowTime.getTime()){
            startAt = sdf.parse(startTime);
        }else {
            startAt = nowTime;
        }
        switch(period){
            case "day" : roundHours = 24; break;
            case "week" : roundHours = 24*7; break;
            case "month" : roundHours = 24*7*31; break;
        }
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup).startAt(startAt).withSchedule(
                SimpleScheduleBuilder.simpleSchedule().withIntervalInHours(roundHours).repeatForever()
//                SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()
        ).build();
        return trigger;
    }
 
    @Override
    public void pauseJob(JobKey jobKey) throws Exception {
        quartzScheduler.pauseJob(jobKey);
    }
 
    @Override
    public void resumeJob(JobKey jobKey) throws Exception {
        quartzScheduler.resumeJob(jobKey);
    }
 
    @Override
    public void retScheduleJob(TriggerKey triggerKey, String startTime, String period) throws Exception {
        Date startAt = null;
        int roundHours = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date nowTime = sdf.parse(sdf.format(new Date()));
        if(sdf.parse(startTime).getTime() > nowTime.getTime() || sdf.parse(startTime).getTime() == nowTime.getTime()){
            startAt = sdf.parse(startTime);
        }else {
            startAt = nowTime;
        }
        switch(period){
            case "day" : roundHours = 24; break;
            case "week" : roundHours = 24*7; break;
            case "month" : roundHours = 24*7*31; break;
        }
 
        SimpleTriggerImpl simpleTrigger = (SimpleTriggerImpl) quartzScheduler.getTrigger(triggerKey);
        if(simpleTrigger == null){
            return;
        }
        simpleTrigger.setStartTime(startAt);
        simpleTrigger.setRepeatInterval(roundHours*60*60*1000);
//        simpleTrigger.setRepeatInterval(roundHours*1000);
 
        quartzScheduler.rescheduleJob(triggerKey, simpleTrigger);
    }
 
    @Override
    public void removeJob(String name, String group) throws Exception {
        TriggerKey triggerKey = new TriggerKey(name, group);
        if(quartzScheduler.getTrigger(triggerKey) != null){
            quartzScheduler.pauseTrigger(triggerKey);
            quartzScheduler.unscheduleJob(triggerKey);
            quartzScheduler.deleteJob(JobKey.jobKey(name, group));
        }
    }
}