shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
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
package com.iplatform.scheduler;
 
import com.iplatform.model.po.S_scheduler;
import com.iplatform.scheduler.util.SchedulerUtils;
 
import com.walker.infrastructure.utils.StringUtils;
import com.walker.scheduler.GatherSchedulerManager;
import com.walker.scheduler.ScheduleEngine;
import com.walker.scheduler.impl.TimedScheduler;
import com.walker.security.SystemLogMan;
 
import java.util.List;
 
/**
 * 平台调度任务管理器抽象,可通过该对象管理任务列表。
 * 包括:启动、暂停、停止、列表等操作。
 * @author 时克英
 * @date 2022-09-08
 */
public abstract class PlatformSchedulerManager extends GatherSchedulerManager {
 
    private ScheduleEngine scheduleEngine;
 
    public void startup(){
        this.initialize();
    }
 
    @Override
    protected void initialize() {
        this.scheduleEngine = this.acquireScheduleEngine();
        if(this.scheduleEngine == null){
            throw new IllegalArgumentException("请提供一个可用的调度引擎对象: ScheduleEngine");
        }
        SystemLogMan.getInstance().checkMan();
        List<S_scheduler> schedulerList = this.acquireRunningList();
        int count = 0;
 
        if(!StringUtils.isEmptyList(schedulerList)){
            boolean result = false;
            for(S_scheduler e : schedulerList){
                if(e.getStatus() == Constants.STATUS_START){
                    result = this.runScheduler(e);
                    if(!result){
                        logger.info("一个调度器初始化运行失败:" + e.getId());
                    } else {
                        count++;
                    }
 
                } else if(e.getStatus() == Constants.STATUS_PAUSE){
                    this.putPauseScheduler(e);
                }
            }
        }
        logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        logger.info("初始化了调度管理器,加载已有调度任务:" + count + "个");
        logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }
 
    protected boolean runScheduler(S_scheduler entity){
        try {
            TimedScheduler scheduler = SchedulerUtils.createScheduler(entity, this.scheduleEngine);
            this.startScheduler(scheduler);
            return true;
        } catch (Exception e) {
            logger.error("系统启动后,自动运行调度器错误:" + entity.getName() + ",id=" + entity.getId(), e);
            return false;
        }
    }
 
    protected TimedScheduler putPauseScheduler(S_scheduler e){
        try {
            TimedScheduler scheduler = SchedulerUtils.createScheduler(e, this.scheduleEngine);
            scheduler.pause();
            this.getCachedData().put(e.getId().intValue(), scheduler);
            return scheduler;
        } catch (Exception e1) {
            logger.error("系统启动后,创建调度器错误:" + e.getName() + ",id=" + e.getId(), e1);
            return null;
        }
    }
 
    public ScheduleEngine getScheduleEngine(){
        return this.scheduleEngine;
    }
 
    /**
     * 获取正在运行的调度任务(包括:暂停的)
     * @return
     */
    protected abstract List<S_scheduler> acquireRunningList();
 
    /**
     * 获得一个调度引擎对象,用于操作任务状态。
     * @return
     */
    protected abstract ScheduleEngine acquireScheduleEngine();
 
}