content: // 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;
  // }*/
  //
  // }