- 浏览: 574321 次
- 性别:
文章分类
- 全部博客 (141)
- java (33)
- spring (6)
- struts2 (4)
- log4j (1)
- sql (8)
- oracle (11)
- 设计模式 (2)
- jsp (2)
- 谈学习 (5)
- gson (3)
- svn (1)
- lucene (1)
- 杂谈 (7)
- hibernate (5)
- play framework (4)
- 页面前端 (16)
- linux (9)
- tomcat (2)
- php (2)
- maven实战 (4)
- HornetQ (1)
- SAE (1)
- Hessian (2)
- 应用 (11)
- 在北京生活感悟 (2)
- apache (1)
- BI (1)
- hadoop系列 (1)
- mongodb (1)
- cache (1)
- 数据结构 (1)
- hive (1)
最新评论
-
AK472AK47:
...
gson java对象与json转换(实例代码说明及教程) -
TryRelax:
update t_h5activity_pagedata ...
mysql update更新带子查询的实现方式 -
CurryKobe:
js中的三大特性:继承、封装、多态 -
bruce.yuan:
一看 tps为168k次/秒 ,我就觉得不专业了 。请把完整的 ...
rpc介绍 -
一抹暗香:
牛逼!
去掉IE浏览器滚动条最简单的方法
Spring对Quartz的支持 任务调度
Spring对任务调度的支持有两种不同的形式:基于JDK Timer和基于Quartz。
我主要说基于Quartz方面的两个例子,如下
项目实战的说明:
Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用,只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。
项目实战一
spring 定时器 配置(通过MethodInvokingJobDetailFactoryBean)
优点:MethodInvokingJobDetailFactoryBean,它能够将普通POJO指定为用户任务。
(1) <bean id="job1" class="com.hxrainbow.marketing.scheduler.jobbean.Test" /> //任务
(2) // 定义调度工作任务
<bean id="birthdayMarketingJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="job1" />
</property>
<property name="targetMethod">
<value>test</value>
</property>
</bean>
(3) // 触发任务条件
<!-- 生日关怀 -->
<bean id="cronBirthdayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="birthdayMarketingJob"></property>
<!-- 系统会在每分钟的0秒执行调度任务。 -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
(4) <!-- 启动调度 -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronBirthdayTrigger" />
</list>
</property>
</bean>
以下是执行任务的类:
public class Test {
public void test(){
System.out.println("-------------测试任务-------------");
}
}
项目实战二
spring 定时器 配置(通过JobDetailBean)
(1) <bean id="springContextHolder" class="com.hxrainbow.crm.util.SpringContextHolder" />
//以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
public class SpringContextHolder implements ApplicationContextAware{
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}
/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
* 如果有多个Bean符合Class, 取出第一个.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map beanMaps = applicationContext.getBeansOfType(clazz);
if (beanMaps!=null && !beanMaps.isEmpty()) {
return (T) beanMaps.values().iterator().next();
} else{
return null;
}
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}
}
(2) // 定义调度工作任务
<bean id ="birthdayMarketingJob" class
="org.springframework.scheduling.quartz.JobDetailBean"> <property name
="jobClass" >
<value>com.hxrainbow.marketing.scheduler.jobbean.BirthdayMarketingJob</value
> </property> </bean>
(3) // 触发任务条件
<!-- 生日关怀 -->
<bean id="cronBirthdayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="birthdayMarketingJob"></property>
<!-- 系统会在每分钟的0秒执行调度任务。 -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
<!--设置参数 -->
<property name="jobDataAsMap">
<map>
<entry key="festivalName">
<value>元旦</value>
</entry>
</map>
</property>
</bean>
(4) <!-- 启动调度 -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronBirthdayTrigger" />
</list>
</property>
</bean>
以下是执行任务的类:
public class BirthdayMarketingJob extends QuartzJobBean{
static Log logger = LogFactory.getLog(BirthdayMarketingJob.class);
/**
* 生日关怀serivce
*/
private BirthdayMarketingService birthdayMarketingService = SpringContextHolder.getBean("birthdayMarketingService");
/**
* 计划任务执行
*
* @param context
* @throws JobExecutionException
*
*/
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
logger.info("--------job 开始---------");
// 执行必要的业务逻辑
//birthdayMarketingService = (BirthdayMarketingService) appcontext.getBean("birthdayMarketingService");
// Every job has its own job detail
JobDetail jobDetail = context.getJobDetail();
// The name is defined in the job definition
String jobName = jobDetail.getName();
// Log the time the job started
logger.info(jobName + "==BirthdayMarketingJob== fired at " + new Date());
// The directory to scan is stored in the job map
//JobDataMap dataMap = jobDetail.getJobDataMap();
//查询全体会员的生日关怀
TBirthday birthday = birthdayMarketingService.getBirthdayForMember();
//进入生日关怀队列
birthdayMarketingService.intoBirthdayQueue(birthday.getId());
//执行生日关怀队列
birthdayMarketingService.executeBirthdayQueue(birthday.getId());
logger.info("--------job 结束---------");
}
public BirthdayMarketingService getBirthdayMarketingService() {
return birthdayMarketingService;
}
public void setBirthdayMarketingService(
BirthdayMarketingService birthdayMarketingService) {
this.birthdayMarketingService = birthdayMarketingService;
}
}
我主要说基于Quartz方面的两个例子,如下
项目实战的说明:
Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用,只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。
项目实战一
spring 定时器 配置(通过MethodInvokingJobDetailFactoryBean)
优点:MethodInvokingJobDetailFactoryBean,它能够将普通POJO指定为用户任务。
(1) <bean id="job1" class="com.hxrainbow.marketing.scheduler.jobbean.Test" /> //任务
(2) // 定义调度工作任务
<bean id="birthdayMarketingJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="job1" />
</property>
<property name="targetMethod">
<value>test</value>
</property>
</bean>
(3) // 触发任务条件
<!-- 生日关怀 -->
<bean id="cronBirthdayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="birthdayMarketingJob"></property>
<!-- 系统会在每分钟的0秒执行调度任务。 -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
(4) <!-- 启动调度 -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronBirthdayTrigger" />
</list>
</property>
</bean>
以下是执行任务的类:
public class Test {
public void test(){
System.out.println("-------------测试任务-------------");
}
}
项目实战二
spring 定时器 配置(通过JobDetailBean)
(1) <bean id="springContextHolder" class="com.hxrainbow.crm.util.SpringContextHolder" />
//以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
public class SpringContextHolder implements ApplicationContextAware{
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}
/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
* 如果有多个Bean符合Class, 取出第一个.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map beanMaps = applicationContext.getBeansOfType(clazz);
if (beanMaps!=null && !beanMaps.isEmpty()) {
return (T) beanMaps.values().iterator().next();
} else{
return null;
}
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}
}
(2) // 定义调度工作任务
<bean id ="birthdayMarketingJob" class
="org.springframework.scheduling.quartz.JobDetailBean"> <property name
="jobClass" >
<value>com.hxrainbow.marketing.scheduler.jobbean.BirthdayMarketingJob</value
> </property> </bean>
(3) // 触发任务条件
<!-- 生日关怀 -->
<bean id="cronBirthdayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="birthdayMarketingJob"></property>
<!-- 系统会在每分钟的0秒执行调度任务。 -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
<!--设置参数 -->
<property name="jobDataAsMap">
<map>
<entry key="festivalName">
<value>元旦</value>
</entry>
</map>
</property>
</bean>
(4) <!-- 启动调度 -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronBirthdayTrigger" />
</list>
</property>
</bean>
以下是执行任务的类:
public class BirthdayMarketingJob extends QuartzJobBean{
static Log logger = LogFactory.getLog(BirthdayMarketingJob.class);
/**
* 生日关怀serivce
*/
private BirthdayMarketingService birthdayMarketingService = SpringContextHolder.getBean("birthdayMarketingService");
/**
* 计划任务执行
*
* @param context
* @throws JobExecutionException
*
*/
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
logger.info("--------job 开始---------");
// 执行必要的业务逻辑
//birthdayMarketingService = (BirthdayMarketingService) appcontext.getBean("birthdayMarketingService");
// Every job has its own job detail
JobDetail jobDetail = context.getJobDetail();
// The name is defined in the job definition
String jobName = jobDetail.getName();
// Log the time the job started
logger.info(jobName + "==BirthdayMarketingJob== fired at " + new Date());
// The directory to scan is stored in the job map
//JobDataMap dataMap = jobDetail.getJobDataMap();
//查询全体会员的生日关怀
TBirthday birthday = birthdayMarketingService.getBirthdayForMember();
//进入生日关怀队列
birthdayMarketingService.intoBirthdayQueue(birthday.getId());
//执行生日关怀队列
birthdayMarketingService.executeBirthdayQueue(birthday.getId());
logger.info("--------job 结束---------");
}
public BirthdayMarketingService getBirthdayMarketingService() {
return birthdayMarketingService;
}
public void setBirthdayMarketingService(
BirthdayMarketingService birthdayMarketingService) {
this.birthdayMarketingService = birthdayMarketingService;
}
}
发表评论
-
linux安装jdk1.7.0_67
2014-08-09 15:21 2964JDK安装配置 1、 下载jdk,本例使用jdk-7u67 ... -
JAVA正则表达式匹配,替换,查找,切割
2014-06-20 17:46 1516import java.util.ArrayList; i ... -
ip正则验证
2014-05-15 19:06 553/** * 正则判断ip是否合法 ... -
Spring 3.x企业实用开发实战 总结一推荐博客专栏
2014-05-12 16:52 0看了Spring 3.x企业实用开发实战 这本书,收获很大 ... -
Spring 3.x企业实用开发实战 总结一spring概述-1.3 Spring体系结构
2014-05-12 16:27 10941.3 Spring体系结构 Spring框架由1400 ... -
Spring 3.x企业实用开发实战 总结一spring概述-1.2 Spring带给我们什么
2014-05-12 16:20 8791.2 Spring带给我们什么 也许有很多的开发者曾经被 ... -
Spring 3.x企业实用开发实战 总结一spring概述-1.1认识spring
2014-05-12 16:15 9941.1 认识Spring Spring是众多Java开源项 ... -
快速排序及java实现
2014-05-12 11:38 8481)基本思想:选择一个基准元素,通常选择第一个元素或者最后一 ... -
java 冒泡排序例子
2014-02-18 09:25 1048按照由大到下的顺序排列。 public class Bub ... -
推荐使用枚举定义常量
2014-01-24 14:48 3823枚举是在Java1.5版本后出现的,它与类常量和静态常量相 ... -
java 优先选择基本类型
2014-01-23 17:02 1029建议29: 优先选择基本类型 包装类型是一个类,它提供了 ... -
java去除字符串中的空格、回车、换行符、制表符
2013-11-04 10:30 1577java去除字符串中的空 ... -
jdk环境变量配置 windows
2013-08-21 09:13 973每次换电脑的时候都查一下,还是记录一下啦 1、下载jdk( ... -
用HttpClient模拟HTTP的GET和POST请求
2013-08-08 11:37 2673一、HttpClient介绍 HttpClient是 ... -
array set相互转换
2013-08-08 10:52 1159//array -->set --->array ... -
java 交换两个变量的值
2013-06-13 09:47 1503前段时间被问到这个问题,我还没太注意,在这里记录一下。 ... -
java 正则表达式
2013-06-11 15:22 1012用到正则时,可以来参考一下,看api最好了,里面都有 pu ... -
java性能监控与分析
2013-02-28 17:06 852一:关于虚拟机的性能监控与工具介绍,我觉得这篇文章介绍的挺好 ... -
由内存溢出引起的深入java之旅
2013-02-26 14:51 883背景:前段时间遇到内存溢出这个问题,就想好好的分析一下原因 ... -
java内存溢出(分析原因)
2013-01-22 10:21 1399最近遇到了这个问题:java.lang.OutOfMemor ...
相关推荐
spring整合quartz定时任务调度..........
Spring+Quartz实现任务调度的小例子.本来不要资源分的,可是CSDN发布资源最低要求填写分值为1分,没办法了。
本源码为基于Spring和Quartz的任务调度监控管理平台设计,共包含553个文件,其中css文件190个,png文件111个,java文件96个,js文件63个,sql文件22个,html文件20个,jsp文件17个,gif文件15个,xml文件9个,...
spring任务调度(Quartz )非常基础,
里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例
spring+quartz任务调度代码版
schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统
Spring Quartz 定时调度任务,带中文注解与jar文件,导入项目即可直接运行。
Spring Quartz 任务调度实例 可直接运行 可应用服务器启动调用 也可main入口调用 主要用于打jar包用
Spring整合任务调度框架Quartz,本文档详细介绍了Spring整合任务调度框架Quartz,希望可以帮助学习者
Spring中Quartz任务调度器cronexpression配置说明
spring quartz java任务调度 完整 可执行
作业 是能够调度的可执行任务,触发器 提供了对作业的调度。虽然这两个实体很容易合在一起,但在 Quartz 中将它们分离开来是有原因的,而且也很有益处。 通过把要执行的工作与它的调度分开,Quartz 允许在不丢失...
spring quartz 时间任务调度框架 spring quartz 时间任务调度框架 spring quartz 时间任务调度框架
该资源描述了用spring+quartz搭建的环境来管理任务调度的基本配置
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器...
7、自定义任务参数:支持在线配置调度任务入参,即时生效; 8、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞; 9、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配...
Spring 4.2.2 集成 Quartz Scheduler 2.2.2 的一个简单的 demo
commons-collections-3.2.2.jar commons-logging-1.2.jar jta-1.1.jar log4j-1.2.14.jar org.springframework....quartz-all-1.8.6.jar slf4j-api-1.5.8.jar slf4j-log4j12.jar 和spring的一些jar包 不一一列出了
Quartz任务调度器与spring整合,做项目的时候常听测试说谁在起着quartz,也不知道是啥,问了下同事,就是定时去执行某些任务的,刚好bug比较少,学习了一下~