首先在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);
}*/ }

quartz和spring集成使用一例子【我】的更多相关文章

  1. Quartz与Spring集成

    关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example. 这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解. 首先来说说个人的理解: 1. ...

  2. Quartz与Spring集成 Job如何自动注入Spring容器托管的对象

    在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类.很显然,第二种方式远比第一种方式来的 ...

  3. Quartz与Spring集成(二)

    一.获取quartz详情jar <!-- quartz 的jar --> <dependency> <groupId>org.quartz-scheduler< ...

  4. Quartz 与 Spring集成

    http://www.cnblogs.com/pigwing/archive/2011/07/12/2104002.html http://blog.arganzheng.me/posts/quart ...

  5. 深入浅出mybatis之与spring集成

    目录 写在前面 详细配置 1.dataSource(数据源) 2.sqlSessionFactory(Session工厂) 3.Mapper(映射器) 4.TransactionManager(事务管 ...

  6. 【转】Dubbo使用例子并且和Spring集成使用

    一.编写客户端和服务器端共用接口类1.登录接口类public interface LoginService {    public User login(String name, String psw ...

  7. Spring集成Quartz定时器

    <!-- Spring集成Quartz开始 --> <bean id="startQuertz" lazy-init="false" auto ...

  8. spring集成quartz

    spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...

  9. Quartz学习——Spring和Quartz集成详解(三)

    Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...

随机推荐

  1. Golang的select多路复用以及channel使用实践

    看到有个例子实现了一个类似于核弹发射装置,在发射之前还是需要随时能输入终止发射. 这里就可以用到cahnnel 配合select 实现多路复用. select的写法用法有点像switch.但是和swi ...

  2. python数学第九天【统计】

  3. javascript中 json数据的解析与序列化

    首先明确一下概念: json格式数据本质上就是字符串: js对象:JavaScript 中的几乎所有事务都是对象:字符串.数字.数组.日期.函数,等等. json数据的解析: 就是把后端传来的json ...

  4. 今天开始学习模式识别与机器学习Pattern Recognition and Machine Learning (PRML),章节5.1,Neural Networks神经网络-前向网络。

    话说上一次写这个笔记是13年的事情了···那时候忙着实习,找工作,毕业什么的就没写下去了,现在工作了有半年时间也算稳定了,我会继续把这个笔记写完.其实很多章节都看了,不过还没写出来,先从第5章开始吧, ...

  5. How to enable mp3 on Ubuntu

    apt install gstreamer1.0 libavcodec57

  6. Git要点

    前面的话 本文将总结Git要点 版本管理工具 [作用] 1.备份文件 2.记录历史 3.回到过去 4.对比差异 [分类] 1.手动版本控制(又叫人肉VCS) 2.LVCS 本地 3.CVCS 集中式( ...

  7. mpi4python

    转载:https://zhuanlan.zhihu.com/p/25332041 前言 在高性能计算的项目中我们通常都会使用效率更高的编译型的语言例如C.C++.Fortran等,但是由于Python ...

  8. Wiener Filter

    假设分别有两个WSS process:$x[n]$,$y[n]$,这两个process之间存在某种关系,并且我们也了解这种关系.现在我们手头上有process $x[n]$,目的是要设计一个LTI系统 ...

  9. Nginx tcp限制并发、IP、记日志

    L:114 Syntax: limit_conn_zone key zone=name:size;//类似http limit_conn 需要开个共享内存  zone=name(共享内存名称):siz ...

  10. BZOJ4755 [JSOI2016]扭动的回文串 【后缀数组】【manacher】

    题目分析: 我写了史上最丑的后缀数组,怎么办? 首先manacher一遍两个串,这样只用考虑第三问.用$作为间隔符拼接两个串,把第一个串翻转.枚举回文中心,取最长的回文串,对于剩下的部分利用LCP匹配 ...