java Quartz定时器任务与Spring 的实现
1.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">CRMscheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<!-- 线程池配置 -->
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">3</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
<!-- JobStore 配置 -->
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<!-- 集群配置 -->
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>
<prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>
<!-- 数据源配置 使用DBCP连接池 数据源与dataSource一致 -->
<prop key="org.quartz.jobStore.dataSource">myDS</prop>
<prop key="org.quartz.dataSource.myDS.driver">${db.driverClassName}</prop>
<prop key="org.quartz.dataSource.myDS.URL">${db.quartz_park.url}</prop>
<prop key="org.quartz.dataSource.myDS.user">${db.username}</prop>
<prop key="org.quartz.dataSource.myDS.password">${db.password}</prop>
<prop key="org.quartz.dataSource.myDS.maxConnections">10</prop>
<prop key="org.quartz.jobStore.misfireThreshold">120000</prop>
</props>
</property>
<property name="schedulerName" value="CRMscheduler" />
<property name="startupDelay" value="30" />
<!-- 自动启动 -->
<property name="autoStartup">
<value>true</value>
</property>
<property name="overwriteExistingJobs">
<value>true</value>
</property>
<property name="triggers">
<list>
<ref local="parkCouponsIssueTrigger"/><!-- 更新优惠券管理的购买表的失效时间字段 -->
<ref local="parkCardOverTimeTrigger"/><!-- 更新超时的卡的信息-->
<ref local="createOverTimeTicketTrigger"/><!-- 创建超时券-->
<ref local="parkCouponsIssueBackupsTrigger"/><!-- 备份优惠券管理的购买表的半年数据-->
</list>
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
</bean>
<!--定时同步parkCouponsIssue表的数据 start yxz -->
<bean id="parkCouponsIssueTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="parkCouponsIssueJobDetail"/>
</property>
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
<bean id="parkCouponsIssueJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
<property name="jobDataAsMap">
<map>
<entry key="targetObject" value="parkCouponsIssueService" />
<entry key="targetMethod" value="updateInvalidTimeData" />
</map>
</property>
<property name="concurrent" value="false" />
</bean>
<!--定时同步communitySynchData表的数据 end -->
<!--定时备份TicketDetails(核销记录)表的数据 start 2017/11/06 yxz-->
<bean id="parkCouponsIssueBackupsTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="parkCouponsIssueBackupsJobDetail"/>
</property>
<property name="cronExpression">
<value>0 0/1 * * * ?</value>
</property>
</bean>
<bean id="parkCouponsIssueBackupsJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
<property name="jobDataAsMap">
<map>
<entry key="targetObject" value="ticketDetailsBackupsService" />
<entry key="targetMethod" value="updateInvalidTimeData" />
</map>
</property>
<property name="concurrent" value="false" />
</bean>
<!--定时同步communitySynchData表的数据 end 2017/11/06 yxz-->
<!--定时同步parkCouponsIssue表的数据 start -->
<bean id="parkCardOverTimeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="parkCardOverTimeJobDetail"/>
</property>
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
<bean id="parkCardOverTimeJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
<property name="jobDataAsMap">
<map>
<entry key="targetObject" value="parkMonthCardInfoAction" />
<entry key="targetMethod" value="updateOverTimeCard" />
</map>
</property>
<property name="concurrent" value="false" />
</bean>
<!--定时同步parkCouponsIssue表的数据 start -->
<bean id="createOverTimeTicketTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="createOverTimeTicketJobDetail"/>
</property>
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
<bean id="createOverTimeTicketJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
<property name="jobDataAsMap">
<map>
<entry key="targetObject" value="parkDetailsAction" />
<entry key="targetMethod" value="createOverTimeTicket" />
</map>
</property>
<property name="concurrent" value="false" />
</bean>
<!--定时同步communitySynchData表的数据 end -->
</beans>
2.作业类1
package com.ivchat.common.bean.quartz;
import org.springframework.scheduling.quartz.JobDetailBean;
/**
* JOB明细对象
* @author 居里智能
*
*/
public class CommJobDetailBean extends JobDetailBean {
private boolean concurrent = false;
@Override
public void afterPropertiesSet() {
try{
if (concurrent){
this.setJobClass(CommDetailQuartzJobBean.class);
}else{
this.setJobClass(StatefulMethodInvokingJob.class);
}
}catch(Exception ex){
ex.printStackTrace();
}
// TODO Auto-generated method stub
super.afterPropertiesSet();
}
public boolean isConcurrent() {
return concurrent;
}
public void setConcurrent(boolean concurrent) {
this.concurrent = concurrent;
}
public boolean getConcurrent() {
return concurrent;
}
}
3.作业类2
package com.ivchat.common.bean.quartz;
import java.lang.reflect.Method;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.QuartzJobBean;
import com.ivchat.common.util.SpringUtil;
/**
* JOB类,到时间即时执行,有可能多个JOB并发执行
* @author 居里智能
*
*/
public class CommDetailQuartzJobBean extends QuartzJobBean implements ApplicationContextAware{
private String targetObject;
private String targetMethod;
private ApplicationContext applicationContext;
@Override
public void executeInternal(JobExecutionContext context)
throws JobExecutionException {
Object otargetObject = null;
Method m = null;
try {
otargetObject = applicationContext.getBean(targetObject);
m = otargetObject.getClass().getMethod(targetMethod,
new Class[] {});
m.invoke(otargetObject, new Object[] {});
} catch (Exception e) {
throw new JobExecutionException(e);
}
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public ApplicationContext getApplicationContext() {
return applicationContext;
}
public String getTargetObject() {
return targetObject;
}
public void setTargetObject(String targetObject) {
this.targetObject = targetObject;
}
public String getTargetMethod() {
return targetMethod;
}
public void setTargetMethod(String targetMethod) {
this.targetMethod = targetMethod;
}
}
java Quartz定时器任务与Spring 的实现的更多相关文章
- java Quartz定时器任务与Spring task定时的几种实现,
java Quartz定时器任务与Spring task定时的几种实现 基于java 的定时任务实现, Quartz 时间详细配置 请查阅 http://www.cnblogs.com/si ...
- java定时器,Spring定时器和Quartz定时器
一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...
- Quartz定时器+Spring + @Autowired注入 空指针异常
在Quartz的定时方法里引用@Autowired注入Bean,会报空指针错误 解决办法: 第一种方法:(推荐,简单,亲测可行) 使用@Resource(name="指定要注入的Bean&q ...
- Spring的quartz定时器重复执行二次的问题解决
Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...
- 基于spring和Quartz定时器
最近做一个小项目,要每7天去调用webservice获取一次数据.所以就用定时器来完成spring是4.1.6,quartz是2.2.1. 首先配置spring的xml文件.首先定义你要被执行的类 & ...
- Spring的quartz定时器同一时刻重复执行二次的问题解决
最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...
- spring启动quartz定时器
在很多中经常要用到定时任务,quartz是定时器中比较好用的,在Spring中使用quartz是很容易的事情,首先在spring的applicationContext.xml文件中增加如下配置: &l ...
- 实现quartz定时器及quartz定时器原理介绍(转)
一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...
- java之定时器任务Timer用法
在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...
随机推荐
- prometheus杂碎
一个监控及告警的系统,内含一个TSDB(时序数据库).在我而言是一个数采程序 重要成员分三块 exploter:实际是外部接口,让各个程序实现这个接口,供普罗米修斯定时从此接口中取数 alert:告警 ...
- python faker 生成随机类型字符串
以前生成测试字符时,用random模块拼来拼去来生成随机串,如姓名,手机,身份证等,还是费一些功夫,不过有了faker模块,一切变得简单起来 基本使用: from faker import Faker ...
- win10下安装基于caffe的 Faster-Rcnn
安装教程 本篇博客将会教会你在Windows下配置py-faster-rcnn,请细心仔细阅读.说白了,Windows下配置这些东西就是一个坑. 安装配置Anaconda 由于py-faste ...
- 深入浅出 1 - AI量化策略快速理解
我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式 ...
- OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 Qt)
之前使用VS+glut实现了gluUnProject使用例子,用于渲染管道的逆过程,将屏幕坐标转换为opengl三维坐标,本文将尝试使用QT来实现. 代码如下: main.cpp 12345678 ...
- python学习笔记(四)
模块与包 python模块,一个.py文件 导入模块的语法: import importable importable#可以是包或包中的模块 import importable1,....,impo ...
- 2018年总结&2019年计划
今天加了来自博客园的好友,才意识到博客已经荒废了许久.其实自己最近也是考虑了总结一下这个繁忙的2018. 2019计划: . 多给家里通电话: . 关心照顾好小奶糖: . 多读书,非小说: . 坚持吃 ...
- gym102007 E
我计划预习五个小时离散,然后hmc补了这道他自认为非常的裸并且很傻逼自己可以一眼秒的简单题,然后给我讲了讲,然后我失去了一整晚的生命迹象. 首先我们可以发现一个神奇的现象,啊,先排个序,然后我们会发现 ...
- Java课程寒假之开发记账本软件(网页版)之一
一.制定网页版记账本的基础功能 首先是下载了几个记账本APP,大致地看了一下记账本的功能:添加记录(支出,收入,自定义模板),查询流水(分类查询),账户. 二.开始做出框架 鉴于记账本有上面的功能,所 ...
- js 表达式与语句
引子:表达式和语句很基础,但是有时会犯错,比如: function(){}//报错 (function(){})//不报错 function f(x){ return x + 1 }()//报错 fu ...