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 ...
随机推荐
- Pyspark spark-submit 集群提交任务以及引入虚拟环境依赖包攻略
网上提交 scala spark 任务的攻略非常多,官方文档其实也非常详细仔细的介绍了 spark-submit 的用法.但是对于 python 的提交提及得非常少,能查阅到的资料非常少导致是有非常多 ...
- linux audit审计(7)--读懂audit日志
让我们先来构造一条audit日志.在home目录下新建一个目录,然后配置一条audit规则,对这个目录的wrax,都记录审计日志: auditctl -w /home/audit_test -p wr ...
- 运维常用mysql语句
1..select @@version; ##查询当前mysql的版本. 2. show variables like 'port';##查看mysql实例的端口. 3.show variables ...
- Hibernate 连接不同数据库的方言
RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS3 ...
- 【bzoj1150】[CTSC2007]数据备份Backup 模拟费用流+链表+堆
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
- 小程序——Tab切换
<view class="body"> <view class="nav bc_white"> <view class=" ...
- java基础之Number
1.Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper ...
- Web.xml中Filter过滤器标签几个说明
在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter ...
- BZOJ1823[JSOI2010]满汉全席——2-SAT+tarjan缩点
题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过 ...
- POJ3261-Milk Patterns-后缀数组
可重叠重复k次的最长子串长度. 还是使用二分答案对heigh数组分组的做法. #include <cstdio> #include <algorithm> #include & ...