- 浏览: 581818 次
- 性别:
文章分类
- 全部博客 (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 3012JDK安装配置 1、 下载jdk,本例使用jdk-7u67 ... -
JAVA正则表达式匹配,替换,查找,切割
2014-06-20 17:46 1569import java.util.ArrayList; i ... -
ip正则验证
2014-05-15 19:06 592/** * 正则判断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 11451.3 Spring体系结构 Spring框架由1400 ... -
Spring 3.x企业实用开发实战 总结一spring概述-1.2 Spring带给我们什么
2014-05-12 16:20 9151.2 Spring带给我们什么 也许有很多的开发者曾经被 ... -
Spring 3.x企业实用开发实战 总结一spring概述-1.1认识spring
2014-05-12 16:15 10471.1 认识Spring Spring是众多Java开源项 ... -
快速排序及java实现
2014-05-12 11:38 8801)基本思想:选择一个基准元素,通常选择第一个元素或者最后一 ... -
java 冒泡排序例子
2014-02-18 09:25 1097按照由大到下的顺序排列。 public class Bub ... -
推荐使用枚举定义常量
2014-01-24 14:48 3865枚举是在Java1.5版本后出现的,它与类常量和静态常量相 ... -
java 优先选择基本类型
2014-01-23 17:02 1068建议29: 优先选择基本类型 包装类型是一个类,它提供了 ... -
java去除字符串中的空格、回车、换行符、制表符
2013-11-04 10:30 1633java去除字符串中的空 ... -
jdk环境变量配置 windows
2013-08-21 09:13 1016每次换电脑的时候都查一下,还是记录一下啦 1、下载jdk( ... -
用HttpClient模拟HTTP的GET和POST请求
2013-08-08 11:37 2713一、HttpClient介绍 HttpClient是 ... -
array set相互转换
2013-08-08 10:52 1216//array -->set --->array ... -
java 交换两个变量的值
2013-06-13 09:47 1581前段时间被问到这个问题,我还没太注意,在这里记录一下。 ... -
java 正则表达式
2013-06-11 15:22 1045用到正则时,可以来参考一下,看api最好了,里面都有 pu ... -
java性能监控与分析
2013-02-28 17:06 888一:关于虚拟机的性能监控与工具介绍,我觉得这篇文章介绍的挺好 ... -
由内存溢出引起的深入java之旅
2013-02-26 14:51 952背景:前段时间遇到内存溢出这个问题,就想好好的分析一下原因 ... -
java内存溢出(分析原因)
2013-01-22 10:21 1472最近遇到了这个问题:java.lang.OutOfMemor ...
相关推荐
Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...
Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...
本源码为基于Spring和Quartz的任务调度监控管理平台设计,共包含553个文件,其中css文件190个,png文件111个,java文件96个,js文件63个,sql文件22个,html文件20个,jsp文件17个,gif文件15个,xml文件9个,...
3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...
里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例
Spring 提供了对Quartz的全面支持,可以通过Spring的JobDetail和Trigger接口来配置和管理定时任务。通过在Spring的配置文件中定义bean,可以轻松地将Quartz任务纳入Spring的管理范围。 3. **中文注解** 在项目中...
通过对这些文件的深入学习和理解,你可以掌握如何在Spring环境中配置和使用Quartz进行任务调度,这对于构建有定时任务需求的应用程序非常有帮助。这个项目提供了实践经验,有助于开发者提升在企业级应用开发中的技能...
基于Spring Boot的Quartz任务调度系统 项目概述 本项目是一个基于Spring Boot和Quartz的任务调度系统,旨在提供灵活的任务管理和调度功能。系统支持多种任务类型,包括Cron表达式任务和单次时间任务,并提供了丰富...
【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,用于按预定的时间间隔执行特定的任务,例如数据同步、报表生成、清理过期数据等。本项目名为“schedule-...
Spring 整合任务调度框架 Quartz 在软件开发中,任务调度框架是非常重要的一部分,它可以帮助开发者更好地管理和执行各种任务。在 Java 领域中,Quartz 是一个非常流行的任务调度框架,而 Spring 是一个非常流行的 ...
Spring框架作为一个全面的企业级应用开发解决方案,提供了强大的任务调度支持,而Quartz则是一个流行的开源作业调度库,能够与Spring很好地集成。现在,我们就来深入探讨"spring quartz 任务调度"这一主题。 首先,...
通过配置`autoStartup="true"`,可以在Spring应用启动时自动调度任务。 7. **运行实例**:项目中的"timedTask项目说明.txt"很可能是详细步骤或代码示例,指导你如何运行这个实例。"timedTask"可能是项目的源代码...
Spring集成Quartz是一款高效的任务调度框架,用于在Java应用程序中执行计划、周期性的任务。Quartz与Spring的结合,使得我们可以充分利用Spring的依赖注入(DI)和AOP特性,简化了任务调度的复杂性。 首先,Quartz...
这篇博客“Spring下使用Quartz任务调度”将深入探讨如何在Spring环境中集成并使用Quartz进行任务管理。 Quartz是一个开源的作业调度框架,它可以被用来创建、调度和执行任务,支持复杂的调度策略。其核心特性包括可...
Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。结合Spring框架,可以方便地在企业级应用中实现复杂的时间触发逻辑。本实例提供了可以直接运行的任务调度解决方案,既...
### Spring + Quartz 动态任务方案详解 #### 一、Spring与Quartz简介及整合背景 Spring 是一款轻量级的 Java 开发框架,旨在简化企业级应用开发过程中的复杂性,提供了一套完整的解决方案,包括但不限于依赖注入、...
Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者定义定时任务,这些任务会在指定的时间点自动执行。Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架...
Quartz的核心优势在于其灵活性和简单性,允许开发者自由定义任务触发的时间表,并且支持任务和触发器的映射。此外,它还具备调度现场的持久化能力,即使系统崩溃,也能恢复任务调度的状态。 在Quartz集群中,每个...
**Spring Quartz 任务调度** Spring Quartz 是一个基于 Java 的任务调度框架,它允许开发者定义定时任务并在应用程序中灵活地调度这些任务。这个框架是 Spring 和 Quartz Scheduler 的集成,提供了与 Spring 框架的...
- **Quartz简介**:Quartz是一个开源的作业调度框架,支持复杂的调度策略,如按日期、时间间隔或CRON表达式调度任务。 - **Spring与Quartz集成**:Spring通过`org.springframework.scheduling.quartz`包提供了一种...