您的位置:首页 > 其它

通用定时任务

2018-12-19 14:32 239 查看

import java.util.Map;

import org.ofbiz.entity.GenericValue;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.housekeeper.myListener.utils.MyDateUtil;
import com.housekeeper.myListener.utils.MyDelegatorUtil;

import woxiang.quartz.InQuartzMain;
import woxiang.util.QuartzManager;
import woxiang.util.SystemUtil;

public class JobQuartzTask implements Job {
    
    private static final String JOB_GROUP = "JOB_MAIN";
    private static final String TRIGGER_GROUP = "TRIGGER_MAIN";
    protected static Map<String,GenericValue> map;
    
    /**
     *    监听定时调度表数据,自动添加定时任务
     *    1.项目启动
     *        自动根据定时表数据,启动定时调度
     *    2.项目启动中
     *        2.1    删除定时任务
     *            任务启动中,定时任务中删除任务
     *            任务未启动,不做任何操作
     *        2.2    修改定时任务
     *            任务启动中,修改定时任务
     *            任务未启动,不做任何操作
     *        2.3    新增定时任务
     *
     * @author Alex
     * @version 创建时间:2018年8月28日 下午7:36:06
     */
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String ip = SystemUtil.getServerLocalIp();
        
        try {
            //1.判断是否第一次启动定时调度
            if (map == null) {
                
                //map缓存定时调度表中数据
                map = MyDelegatorUtil.mapFromEntity(InQuartzMain.delegator, "Meta_schedule", "Meta_scheduleId");
                
                //根据map中的key获取每个数据
                for (String key : map.keySet()) {
                    GenericValue lis = map.get(key);
                    String Meta_ips = lis.getString("Meta_ips");                        //运行服务器IPs
                    String Meta_tiggerType = lis.getString("Meta_tiggerType");            //触发类型
                    String Meta_classpath = lis.getString("Meta_classpath");            //触发类路径
                    String Meta_nameEnglish = lis.getString("Meta_nameEnglish");        //任务名称
                    String Meta_triggerName = lis.getString("Meta_triggerName");        //触发器名
                    String Meta_exp = lis.getString("Meta_exp");                        //触发时间
                    String Meta_scheduleStatus = lis.getString("Meta_scheduleStatus");    //触发状态
                    
                    //判断是否允许使用定时调度
                    if (Meta_ips.indexOf(ip) != -1 && "running".equals(Meta_scheduleStatus)){
                        
                        if ("CLASSPATH".equals(Meta_tiggerType)) {
                            //添加任务
                            Class jobClass = Class.forName(Meta_classpath);
                            QuartzManager.addJob(Meta_nameEnglish, JOB_GROUP, Meta_triggerName, TRIGGER_GROUP, jobClass, Meta_exp);
                            
                            //定时启动后修改任务上次运行状态和运行时间
                            MyDelegatorUtil.updateBySQL(InQuartzMain.delegator, "update meta_schedule set META_LAST_STATUS_RUNNING = 'normal',"
                                    + "META_LAST_TIME_RUNNING = '" + MyDateUtil.getCurrentDateByYMDHMS()+
                                    "' where META_SCHEDULE_ID = '" + key + "'");
                        }
                    }
                }
                
                //2.通过map缓存,查看任务是否修改
            }else {
                //加载最新定时调度表中数据
                Map<String,GenericValue> mapNew = MyDelegatorUtil.mapFromEntity(InQuartzMain.delegator, "Meta_schedule", "Meta_scheduleId");
                
                for (String key : map.keySet()) {
                    GenericValue newList = mapNew.get(key);            //新数据
                    GenericValue oldList = map.get(key);            //旧数据
                    
                    //2.1判断该定时任务是否已删除
                    if (newList == null) {
                        String Meta_nameEnglish = oldList.getString("Meta_nameEnglish");        //任务名称
                        String Meta_triggerName = oldList.getString("Meta_triggerName");        //触发器名
                        String Meta_ips = oldList.getString("Meta_ips");                        //运行服务器IPs
                        String Meta_tiggerType = oldList.getString("Meta_tiggerType");            //触发类型
                        String Meta_scheduleStatus = oldList.getString("Meta_scheduleStatus");    //触发状态
                        
                        //判断是否允许使用定时调度
                        if (Meta_ips.indexOf(ip) != -1 && "running".equals(Meta_scheduleStatus)) {
                            if ("CLASSPATH".equals(Meta_tiggerType)) {
                                //删除任务
                                QuartzManager.removeJob(Meta_nameEnglish, JOB_GROUP, Meta_triggerName, TRIGGER_GROUP);
                            }
                        }
                        
                    }else {
                        String Meta_lastTimeRunning = newList.getString("Meta_lastTimeRunning");    //获取任务最后运行时间
                        
                        //2.2判断定时任务是否修改
                        if (Meta_lastTimeRunning == null || Meta_lastTimeRunning.isEmpty()) {
                            String Meta_nameEnglish = newList.getString("Meta_nameEnglish");            //任务名称
                            String Meta_triggerName = newList.getString("Meta_triggerName");            //触发器名
                            String Meta_ips = newList.getString("Meta_ips");                            //运行服务器IPs
                            String Meta_tiggerType = newList.getString("Meta_tiggerType");                //触发类型
                            String Meta_exp = newList.getString("Meta_exp");                            //触发时间
                            String Meta_classpath = newList.getString("Meta_classpath");                //触发类路径
                            String Meta_scheduleStatusNew = newList.getString("Meta_scheduleStatus");    //触发状态
                            String Meta_scheduleStatusOld = oldList.getString("Meta_scheduleStatus");    //触发状态
                            
                            //判断任务最新状态
                            if ("running".equals(Meta_scheduleStatusNew)) {
                                
                                //判断任务之前状态,如运行状态,将修改任务
                                if (Meta_ips.indexOf(ip) != -1 && "running".equals(Meta_scheduleStatusOld)) {
                                    
                                    if ("CLASSPATH".equals(Meta_tiggerType)) {
                                        //修改任务
                                        QuartzManager.modifyJobTime(Meta_nameEnglish, JOB_GROUP, Meta_triggerName, TRIGGER_GROUP, Meta_exp);
                                        //定时启动后修改任务上次运行状态和运行时间
                                        MyDelegatorUtil.updateBySQL(InQuartzMain.delegator, "update meta_schedule set META_LAST_STATUS_RUNNING = 'normal',"
                                                + "META_LAST_TIME_RUNNING = '" + MyDateUtil.getCurrentDateByYMDHMS() +
                                                "' where META_SCHEDULE_ID = '" + key + "'");
                                    }
                                    
                                }else if (Meta_ips.indexOf(ip) != -1 && !"running".equals(Meta_scheduleStatusOld)) {
                                    //之前状态不为运行运行状态,添加任务
                                    Class jobClass = Class.forName(Meta_classpath);
                                    QuartzManager.addJob(Meta_nameEnglish, JOB_GROUP, Meta_triggerName, TRIGGER_GROUP, jobClass, Meta_exp);
                                    
                                    //定时启动后修改任务上次运行状态和运行时间
                                    MyDelegatorUtil.updateBySQL(InQuartzMain.delegator, "update meta_schedule set META_LAST_STATUS_RUNNING = 'normal',"
                                            + "META_LAST_TIME_RUNNING = '"+ MyDateUtil.getCurrentDateByYMDHMS() +
                                            "' where META_SCHEDULE_ID = '" + key + "'");
                                }else {
                                }
                                
                            }else {
                                //判断任务之前状态,如运行状态,将任务从定时器中删除
                                if (Meta_ips.indexOf(ip) != -1 && "running".equals(Meta_scheduleStatusOld)) {
                                    
                                    if ("CLASSPATH".equals(Meta_tiggerType)) {
                                        //通过job监听
                                        QuartzManager.removeJob(Meta_nameEnglish, JOB_GROUP, Meta_triggerName, TRIGGER_GROUP);
                                        //定时启动后修改任务上次运行状态和运行时间
                                        MyDelegatorUtil.updateBySQL(InQuartzMain.delegator, "update meta_schedule set META_LAST_STATUS_RUNNING = 'normal',"
                                                + "META_LAST_TIME_RUNNING = '" + MyDateUtil.getCurrentDateByYMDHMS() +
                                                "' where META_SCHEDULE_ID = '" + key + "'");
                                    }
                                    
                                }
                                
                            }
                        }
                    }
                }
                
                //2.3.通过新数据查看是否有新增数据
                for (String key : mapNew.keySet()) {
                    GenericValue oldList = map.get(key);            //旧数据
                    GenericValue newList = mapNew.get(key);            //新数据
                    
                    //判断该定时任务是否新增
                    if (oldList == null) {
                        //新增任务
                        String Meta_ips = newList.getString("Meta_ips");                        //运行服务器IPs
                        String Meta_tiggerType = newList.getString("Meta_tiggerType");            //触发类型
                        String Meta_classpath = newList.getString("Meta_classpath");            //触发类路径
                        String Meta_nameEnglish = newList.getString("Meta_nameEnglish");        //任务名称
                        String Meta_triggerName = newList.getString("Meta_triggerName");        //触发器名
                        String Meta_exp = newList.getString("Meta_exp");                        //触发时间
                        String Meta_scheduleStatus = newList.getString("Meta_scheduleStatus");    //触发状态
                        
                        //判断是否允许使用定时调度
                        if (Meta_ips.indexOf(ip) != -1 && "running".equals(Meta_scheduleStatus)){
                            
                            if ("CLASSPATH".equals(Meta_tiggerType)) {
                                //通过job监听
                                Class jobClass = Class.forName(Meta_classpath);
                                QuartzManager.addJob(Meta_nameEnglish, JOB_GROUP, Meta_triggerName, TRIGGER_GROUP, jobClass, Meta_exp);
                                
                                //定时启动后修改任务上次运行状态和运行时间
                                MyDelegatorUtil.updateBySQL(InQuartzMain.delegator, "update meta_schedule set META_LAST_STATUS_RUNNING = 'normal',"
                                        + "META_LAST_TIME_RUNNING = '" + MyDateUtil.getCurrentDateByYMDHMS()+
                                        "' where META_SCHEDULE_ID = '" + key + "'");
                            }
                            
                        }
                    }
                }
                map = MyDelegatorUtil.mapFromEntity(InQuartzMain.delegator, "Meta_schedule", "Meta_scheduleId");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OFBiz Addjob Quartz