zoukankan      html  css  js  c++  java
  • quartz和spring集成使用一例子【我】

    首先在spring配置文件中增加:

        <!-- 调度器 -->
        <bean name="scheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
               <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
               <property name="quartzProperties"><!-- 需要添加的内容配置 -->
                <props>
                    <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop> 
                </props>
            </property>
        </bean>
        
        <bean name="jobManager" class="com.xxx.crm.schedule.JobManager" init-method="init" destroy-method="close">
            <property name="scheduler" ref="scheduler"/>
        </bean>

    定时任务公共抽象类:

    /*
    * @author junsheng   
    * @date 2018年8月13日 上午1:59:48 
    * @Description: 此处添加文件描述……
    */
    
    
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.Job;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.JobKey;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.matchers.GroupMatcher;
    
    
    public abstract class AbstractScheduler {
        public void scheduleJob(String name, String group, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> jobParam) throws Exception {
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(name, group).build();
            if (jobParam != null) {
                jobDetail.getJobDataMap().putAll(jobParam);
            }
            CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity(name, group).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();
    
            JobKey jobKey = JobKey.jobKey(name, group);
            try {
                getScheduler().deleteJob(jobKey);
    
                getScheduler().scheduleJob(jobDetail, trigger);
    
                getScheduler().start();
            } catch (SchedulerException e) {
                throw e;
            }
        }
    
        public void deleteJob(String jobName, String jobGroup) throws SchedulerException {
            JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
            try {
                getScheduler().deleteJob(jobKey);
            } catch (SchedulerException e) {
                throw e;
            }
        }
    
        public void deleteAllJob() throws SchedulerException {
            List<String> groups = getScheduler().getJobGroupNames();
            if (groups == null) {
                return;
            }
            for (String group : groups) {
                Set<JobKey> jobKeys = getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(group));
                if (jobKeys != null) {
                    for (JobKey jobKey : jobKeys) {
                        getScheduler().deleteJob(jobKey);
                    }
                }
            }
        }
    
        public void deleteGroupAllJob(String groupName) throws SchedulerException {
            Set<JobKey> jobKeys = getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(groupName));
            if (jobKeys == null) {
                return;
            }
            for (JobKey jobKey : jobKeys) {
                getScheduler().deleteJob(jobKey);
            }
        }
    
        public abstract Scheduler getScheduler();
    }

    定时任务具体类:

    import java.util.Map;
    
    import org.quartz.Job;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.xxx.batch.task.BatchBeginJob;
    import com.xxx.batch.task.BatchEndJob;
    import com.xxx.common.task.AbstractScheduler;
    import com.xxx.util.PropertieUtil;
    
    public class JobManager extends AbstractScheduler {
        private static final String JOB_GROUP = "myGroup";
    
        private final Logger log = LoggerFactory.getLogger(JobManager.class);
        private Scheduler scheduler;
    
        public void init() {
            try {
                /*******************************初始化调度任务******************************/
    //            批量处理定时器
    //            每天凌晨1点执行一次:0 0 1 * * ?
                createOrUpdateJob("batchBengin", PropertieUtil.getConfig("cron.batch.begin"), BatchBeginJob.class);            
                createOrUpdateJob("batchEnd", PropertieUtil.getConfig("cron.batch.end"), BatchEndJob.class);
            } catch (Exception e) {
                this.log.error("任务调度JobManager启动失败,异常信息:" + e.getMessage(), e);
            }
        }
    
        public void close() {
            try {
                getScheduler().shutdown(true);
            } catch (SchedulerException e) {
                this.log.error(e.getMessage(), e);
            }
        }
    
        public void deleteJob(String jobName) throws Exception {
            deleteJob(jobName, "myGroup");
        }
    
        public void createOrUpdateJob(String jobName, String cronExpression, Class<? extends Job> jobClass) throws Exception {
            scheduleJob(jobName, "myGroup", cronExpression, jobClass, null);
        }
    
        public void createOrUpdateJob(String jobGroup, String jobName, String cronExpression, Class<? extends Job> jobClass) throws Exception {
            scheduleJob(jobName, jobGroup, cronExpression, jobClass, null);
        }
    
        public void createOrUpdateJob(String jobName, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> param) throws Exception {
            scheduleJob(jobName, "myGroup", cronExpression, jobClass, param);
        }
    
        public void createOrUpdateJob(String jobGroup, String jobName, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> param) throws Exception {
            scheduleJob(jobName, jobGroup, cronExpression, jobClass, param);
        }
    
        @Override
        public Scheduler getScheduler() {
            return this.scheduler;
        }
    
        public void setScheduler(Scheduler scheduler) {
            this.scheduler = scheduler;
        }
    }

    具体任务执行类:

    类1:

    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.xxx.common.task.SpringContext;
    import com.xxx.schedule.JobManager;
    import com.xxx.util.PropertieUtil;
    
    public class BatchBeginJob implements Job {
        
        protected static Logger logger = LoggerFactory.getLogger(BatchBeginJob.class);
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            
            //开启循环定时器
            JobManager jobManager = (JobManager) SpringContext.getApplicationContext().getBean("jobManager");
            try {
    //            每隔1分钟执行一次:0 */1 * * * ?   每隔5秒执行一次:*/5 * * * * ?
                jobManager.createOrUpdateJob("batchLoopGroup","batchLoop", PropertieUtil.getConfig("cron.batch.loop"), BatchLoopJob.class);
                logger.info("****** 启动循环定时器成功  ******");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    类2:

    import java.util.Map;
    
    import org.quartz.DisallowConcurrentExecution;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.xxx.batch.service.BatchService;
    import com.xxx.batch.util.BatchConstants;
    import com.xxx.common.task.SpringContext;
    import com.xxx.inter.BatchRNeService;
    import com.xxx.util.Util;
    
    
    @DisallowConcurrentExecution //使任务以单线程方式执行的注解
    public class BatchLoopJob implements Job {
        
        protected static Logger logger = LoggerFactory.getLogger(BatchLoopJob.class);
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            
            //远程处理合规业务接口服务
            BatchRNeService batchRNeService = (BatchRNeService)SpringContext.getApplicationContext().getBean("batchRNeService");
            //本地查询文档表服务
            BatchService batchService = (BatchService) SpringContext.getApplicationContext().getBean("batchServiceImpl");
            
            //记录开始时间
            long beginTime = System.currentTimeMillis();
            try {
                Map map = null;
            
                //最后查询  状态为 未处理的(STATUS_CD = 1000)
                map = batchService.queryOneByHandleStatus(BatchConstants.HANDLE_BEFORE);
                //如果存在, 取第一条即可
                if(map!=null) {
                    //调侯彬的接口
                    logger.info("{}||{}","-------------开始调用处理接口,参数为: ", map.get("haha_ID"));
                    String jsonString = batchRNeService.batchRemoteService(Util.getInterfaceReq(map));
                    Map<String, Object> responseMap = Util.getJsonResultObject(jsonString);
                    logger.info("{}||{}","-------------批接口返回结果:", responseMap);
                    return;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                logger.info("{}||{}","--------------任务耗时:",(System.currentTimeMillis()-beginTime)+" 毫秒");
            }
            
        }
        
    //    @Resource  //这里用这个注解无效,必须用getBean的方式
    //    private BatchRNeService batchRNeService;
        
    /*    public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-config/disconf.beans.xml"); 
    //        BatchService service = (BatchService)context.getBean("batchServiceImpl");
    //        Map map = service.queryOneByHandleStatus("1100");
            BatchRNeService service = (BatchRNeService)context.getBean("batchRNeService");
            HashMap<Object, Object> map = new HashMap<>();
            map.put("haha_ID", 1);
            System.out.println("-------------: "+map);
            String resp = service.batchRemoteService(Util.getInterfaceReq(map));
            System.out.println("-----------  --: "+resp);
    //        {DOC_NAME=h1, DOC_TYPE=1000, haha_ID=1, STATUS_CD=1100, DOC_REGION_CODE=11}
            //文件id
    //        String docId = String.valueOf(map.get("haha_ID"));
    //        System.out.println(docId);
        }*/
    
    }
  • 相关阅读:
    教育网玩QQ游戏解决办法
    国家重点实验室分布<转>
    MySQL存储过程错误No data zero rows fetched, selected, or processed
    安装Oracle Developer后 pl sql无法使用
    Jsp开发入门
    开源项目MiniOA协同办公系统介绍
    JavaScript实现网页单击事件
    (转)普及基础知识一
    “人脸识别程序”总结
    (转)如何加速Altera的EDA工具? (IC Design) (Quartus II) (Nios II) (SOPC Builder)
  • 原文地址:https://www.cnblogs.com/libin6505/p/10635106.html
Copyright © 2011-2022 走看看