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);
}*/ }
quartz和spring集成使用一例子【我】的更多相关文章
- Quartz与Spring集成
关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example. 这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解. 首先来说说个人的理解: 1. ...
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类.很显然,第二种方式远比第一种方式来的 ...
- Quartz与Spring集成(二)
一.获取quartz详情jar <!-- quartz 的jar --> <dependency> <groupId>org.quartz-scheduler< ...
- Quartz 与 Spring集成
http://www.cnblogs.com/pigwing/archive/2011/07/12/2104002.html http://blog.arganzheng.me/posts/quart ...
- 深入浅出mybatis之与spring集成
目录 写在前面 详细配置 1.dataSource(数据源) 2.sqlSessionFactory(Session工厂) 3.Mapper(映射器) 4.TransactionManager(事务管 ...
- 【转】Dubbo使用例子并且和Spring集成使用
一.编写客户端和服务器端共用接口类1.登录接口类public interface LoginService { public User login(String name, String psw ...
- Spring集成Quartz定时器
<!-- Spring集成Quartz开始 --> <bean id="startQuertz" lazy-init="false" auto ...
- spring集成quartz
spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...
- Quartz学习——Spring和Quartz集成详解(三)
Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...
随机推荐
- window.location.href ie 不兼容问题
今天再做项目演示的时候,用的是ie浏览器报错404,项目都运行好久了,第一次用ie就这样了悲剧,贴下解决方法吧 function getContextPath() { var pathName = d ...
- The Bug and Exception of Hibernate
1: hibernate4.3.5 的@oneToOne注解有Bug,建议不使用该版本,或者使用该版本不使用@table annotation. 2:今天在用hibernate4.2.13的时候, ...
- Zero to Build: Create new Xamarin apps in minutes with AppMap
Creating a new Xamarin.Forms app can be an intimidating task, especially if you add in content pages ...
- java 中的包概念
Java 中的包package, 就是电脑中的文件夹.我们平时在工作中,文件太多时,都会新建文件夹进行分类管理,java 中的包也是类似的道理,当我们的类太多时,也需要进行分类管理,这时我们就会把类文 ...
- 修改iptables后重启返回错误
在防火墙添加规则后我是这样改的vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ...
- 多校#5-1005-Instring-HDU5785-manacher+维护
寻找三元组(i,j,k),使得(i,j)(j,k)都是回文字串,其中i<=j<k. 可以发现,对于每一位i,只要预处理出来有多少个以i为右端的回文串和以i为左端的回文串.把那些串的另一端的 ...
- HDU1800 字典树写法
题意:高级魔法师可以教低级魔法师 魔法扫把技能,同时教会了的低级魔法师又可以教比他更低级是,是传递的关系 同时如果教会了的话,他们可以同时坐一个扫把 问最少需要多少个扫把 思路:就是判断相同的数字最多 ...
- Python可迭代对象中的添加和删除(add,append,pop,remove,insert)
list: classmates = ['Michael', 'Bob', 'Tracy'] classmates.append('Adam') //添加在末尾,没有add()方法 classmate ...
- Django+Xadmin打造在线教育系统(二)
基于xadmin的后台管理 先使用pip进行安装xadmin及其依赖包 pip install django-adminx 安装完成后卸载xadmin,保留依赖包即可 pip uninstall dj ...
- wstngfw IKEv2服务器配置示例
wstngfw IKEv2服务器配置示例 移动客户端的服务器配置有几个组件: 为***创建一个证书结构 配置IPsec移动客户端设置 为客户端连接创建阶段1和阶段2 添加IPsec防火墙规则 创建** ...