| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 | //package com.xxl.job.admin.core.schedule;////import com.xxl.job.admin.core.conf.XxlJobAdminConfig;//import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;//import com.xxl.job.admin.core.model.XxlJobInfo;//import com.xxl.job.admin.core.thread.JobFailMonitorHelper;//import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;//import com.xxl.job.admin.core.util.I18nUtil;//import com.xxl.job.core.biz.AdminBiz;//import com.xxl.job.core.biz.ExecutorBiz;//import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;//import com.xxl.rpc.remoting.invoker.XxlRpcInvokerFactory;//import com.xxl.rpc.remoting.invoker.call.CallType;//import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;//import com.xxl.rpc.remoting.invoker.route.LoadBalance;//import com.xxl.rpc.remoting.net.NetEnum;//import com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler;//import com.xxl.rpc.remoting.provider.XxlRpcProviderFactory;//import com.xxl.rpc.serialize.Serializer;//import org.quartz.*;//import org.quartz.Trigger.TriggerState;//import org.quartz.impl.triggers.CronTriggerImpl;//import org.slf4j.Logger;//import org.slf4j.LoggerFactory;//import org.springframework.util.Assert;////import javax.servlet.ServletException;//import javax.servlet.http.HttpServletRequest;//import javax.servlet.http.HttpServletResponse;//import java.io.IOException;//import java.util.Date;//import java.util.concurrent.ConcurrentHashMap;/////**// * base quartz scheduler util// * @author xuxueli 2015-12-19 16:13:53// *///public final class XxlJobDynamicScheduler {//    private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler_old.class);////    // ---------------------- param ----------------------////    // scheduler//    private static Scheduler scheduler;//    public void setScheduler(Scheduler scheduler) {//		XxlJobDynamicScheduler_old.scheduler = scheduler;//	}//////    // ---------------------- init + destroy ----------------------//    public void start() throws Exception {//        // valid//        Assert.notNull(scheduler, "quartz scheduler is null");////        // init i18n//        initI18n();////        // admin registry monitor run//        JobRegistryMonitorHelper.getInstance().start();////        // admin monitor run//        JobFailMonitorHelper.getInstance().start();////        // admin-server//        initRpcProvider();////        logger.info(">>>>>>>>> init xxl-job admin success.");//    }//////    public void destroy() throws Exception {//        // admin trigger pool stop//        JobTriggerPoolHelper.toStop();////        // admin registry stop//        JobRegistryMonitorHelper.getInstance().toStop();////        // admin monitor stop//        JobFailMonitorHelper.getInstance().toStop();////        // admin-server//        stopRpcProvider();//    }//////    // ---------------------- I18n ----------------------////    private void initI18n(){//        for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {//            item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));//        }//    }//////    // ---------------------- admin rpc provider (no server version) ----------------------//    private static ServletServerHandler servletServerHandler;//    private void initRpcProvider(){//        // init//        XxlRpcProviderFactory xxlRpcProviderFactory = new XxlRpcProviderFactory();//        xxlRpcProviderFactory.initConfig(//                NetEnum.NETTY_HTTP,//                Serializer.SerializeEnum.HESSIAN.getSerializer(),//                null,//                0,//                XxlJobAdminConfig.getAdminConfig().getAccessToken(),//                null,//                null);////        // add services//        xxlRpcProviderFactory.addService(AdminBiz.class.getName(), null, XxlJobAdminConfig.getAdminConfig().getAdminBiz());////        // servlet handler//        servletServerHandler = new ServletServerHandler(xxlRpcProviderFactory);//    }//    private void stopRpcProvider() throws Exception {//        XxlRpcInvokerFactory.getInstance().stop();//    }//    public static void invokeAdminService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {//        servletServerHandler.handle(null, request, response);//    }//////    // ---------------------- executor-client ----------------------//    private static ConcurrentHashMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();//    public static ExecutorBiz getExecutorBiz(String address) throws Exception {//        // valid//        if (address==null || address.trim().length()==0) {//            return null;//        }////        // load-cache//        address = address.trim();//        ExecutorBiz executorBiz = executorBizRepository.get(address);//        if (executorBiz != null) {//            return executorBiz;//        }////        // set-cache//        executorBiz = (ExecutorBiz) new XxlRpcReferenceBean(//                NetEnum.NETTY_HTTP,//                Serializer.SerializeEnum.HESSIAN.getSerializer(),//                CallType.SYNC,//                LoadBalance.ROUND,//                ExecutorBiz.class,//                null,//                5000,//                address,//                XxlJobAdminConfig.getAdminConfig().getAccessToken(),//                null,//                null).getObject();////        executorBizRepository.put(address, executorBiz);//        return executorBiz;//    }//////    // ---------------------- schedule util ----------------------////    /**//     * fill job info//     *//     * @param jobInfo//     *///	public static void fillJobInfo(XxlJobInfo jobInfo) {////        String name = String.valueOf(jobInfo.getId());////        // trigger key//        TriggerKey triggerKey = TriggerKey.triggerKey(name);//        try {////            // trigger cron//			Trigger trigger = scheduler.getTrigger(triggerKey);//			if (trigger!=null && trigger instanceof CronTriggerImpl) {//				String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();//				jobInfo.setJobCron(cronExpression);//			}////            // trigger state//            TriggerState triggerState = scheduler.getTriggerState(triggerKey);//			if (triggerState!=null) {//				jobInfo.setJobStatus(triggerState.name());//			}////            //JobKey jobKey = new JobKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup()));//            //JobDetail jobDetail = scheduler.getJobDetail(jobKey);//            //String jobClass = jobDetail.getJobClass().getName();////		} catch (SchedulerException e) {//			logger.error(e.getMessage(), e);//		}//	}//////    /**//     * add trigger + job//     *//     * @param jobName//     * @param cronExpression//     * @return//     * @throws SchedulerException//     *///	public static boolean addJob(String jobName, String cronExpression) throws SchedulerException {//    	// 1、job key//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);//        JobKey jobKey = new JobKey(jobName);////        // 2、valid//        if (scheduler.checkExists(triggerKey)) {//            return true;    // PASS//        }////        // 3、corn trigger//        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();   // withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度//        CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();////        // 4、job detail//		Class<? extends Job> jobClass_ = RemoteHttpJobBean.class;   // Class.forName(jobInfo.getJobClass());//		JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();////        /*if (jobInfo.getJobData()!=null) {//        	JobDataMap jobDataMap = jobDetail.getJobDataMap();//        	jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));//        	// JobExecutionContext context.getMergedJobDataMap().get("mailGuid");//		}*/////        // 5、schedule job//        Date date = scheduler.scheduleJob(jobDetail, cronTrigger);////        logger.info(">>>>>>>>>>> addJob success(quartz), jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date);//        return true;//    }//////    /**//     * remove trigger + job//     *//     * @param jobName//     * @return//     * @throws SchedulerException//     *///    public static boolean removeJob(String jobName) throws SchedulerException {////        JobKey jobKey = new JobKey(jobName);//        scheduler.deleteJob(jobKey);////        /*TriggerKey triggerKey = TriggerKey.triggerKey(jobName);//        if (scheduler.checkExists(triggerKey)) {//            scheduler.unscheduleJob(triggerKey);    // trigger + job//        }*/////        logger.info(">>>>>>>>>>> removeJob success(quartz), jobKey:{}", jobKey);//        return true;//    }//////    /**//     * updateJobCron//     *//     * @param jobName//     * @param cronExpression//     * @return//     * @throws SchedulerException//     *///	public static boolean updateJobCron(String jobName, String cronExpression) throws SchedulerException {////        // 1、job key//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);////        // 2、valid//        if (!scheduler.checkExists(triggerKey)) {//            return true;    // PASS//        }////        CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);////        // 3、avoid repeat cron//        String oldCron = oldTrigger.getCronExpression();//        if (oldCron.equals(cronExpression)){//            return true;    // PASS//        }////        // 4、new cron trigger//        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();//        oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();////        // 5、rescheduleJob//        scheduler.rescheduleJob(triggerKey, oldTrigger);////        /*//        JobKey jobKey = new JobKey(jobName);////        // old job detail//        JobDetail jobDetail = scheduler.getJobDetail(jobKey);////        // new trigger//        HashSet<Trigger> triggerSet = new HashSet<Trigger>();//        triggerSet.add(cronTrigger);//        // cover trigger of job detail//        scheduler.scheduleJob(jobDetail, triggerSet, true);*/////        logger.info(">>>>>>>>>>> resumeJob success, JobName:{}", jobName);//        return true;//    }//////    /**//     * pause//     *//     * @param jobName//     * @return//     * @throws SchedulerException//     *///    /*public static boolean pauseJob(String jobName) throws SchedulerException {////    	TriggerKey triggerKey = TriggerKey.triggerKey(jobName);////        boolean result = false;//        if (scheduler.checkExists(triggerKey)) {//            scheduler.pauseTrigger(triggerKey);//            result =  true;//        }////        logger.info(">>>>>>>>>>> pauseJob {}, triggerKey:{}", (result?"success":"fail"),triggerKey);//        return result;//    }*///////    /**//     * resume//     *//     * @param jobName//     * @return//     * @throws SchedulerException//     *///    /*public static boolean resumeJob(String jobName) throws SchedulerException {////        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);////        boolean result = false;//        if (scheduler.checkExists(triggerKey)) {//            scheduler.resumeTrigger(triggerKey);//            result = true;//        }////        logger.info(">>>>>>>>>>> resumeJob {}, triggerKey:{}", (result?"success":"fail"), triggerKey);//        return result;//    }*///////    /**//     * run//     *//     * @param jobName//     * @return//     * @throws SchedulerException//     *///    /*public static boolean triggerJob(String jobName) throws SchedulerException {//    	// TriggerKey : name + group//    	JobKey jobKey = new JobKey(jobName);//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);////        boolean result = false;//        if (scheduler.checkExists(triggerKey)) {//            scheduler.triggerJob(jobKey);//            result = true;//            logger.info(">>>>>>>>>>> runJob success, jobKey:{}", jobKey);//        } else {//        	logger.info(">>>>>>>>>>> runJob fail, jobKey:{}", jobKey);//        }//        return result;//    }*///////    /**//     * finaAllJobList//     *//     * @return//     *//*//    @Deprecated//    public static List<Map<String, Object>> finaAllJobList(){//        List<Map<String, Object>> jobList = new ArrayList<Map<String,Object>>();////        try {//            if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) {//                return null;//            }//            String groupName = scheduler.getJobGroupNames().get(0);//            Set<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));//            if (jobKeys!=null && jobKeys.size()>0) {//                for (JobKey jobKey : jobKeys) {//                    TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP);//                    Trigger trigger = scheduler.getTrigger(triggerKey);//                    JobDetail jobDetail = scheduler.getJobDetail(jobKey);//                    TriggerState triggerState = scheduler.getTriggerState(triggerKey);//                    Map<String, Object> jobMap = new HashMap<String, Object>();//                    jobMap.put("TriggerKey", triggerKey);//                    jobMap.put("Trigger", trigger);//                    jobMap.put("JobDetail", jobDetail);//                    jobMap.put("TriggerState", triggerState);//                    jobList.add(jobMap);//                }//            }////        } catch (SchedulerException e) {//            logger.error(e.getMessage(), e);//            return null;//        }//        return jobList;//    }*/////}
 |