Quartz与Spring集成
关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example。
这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解。
首先来说说个人的理解:
1、Quartz的运行原理
Quartz的重要组成部分就是,线程池和Trigger。而这些资源是被一个叫StandScheduler的类管理起来的。
所以,每一个Quartz程序咋启动的时候,都需要创建一个Scheduler对象,由它来管理Quartz的资源。它启动的时候,会首先启动Quartz的调度线程,然后初始化线程池中的线程。
每当一个trigger生效的时候,会从线程池中取出一个线程,调用对应job的execute方法,开始执行。
2.Quartz的job如何取消
首先你的job要继承自interruptablejob,但job的interrupt方法被调用时,你自己可以设一个标志表明已经被cancel了,在execute方法不断的检测这个标志,发现cacel,则中断当前的job。
3.Quartz如何嵌入到Spring中
首先要明白,Quartz如何启动Spring。且看下面的pring的配置:
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="/WEB-INF/classes/quartz.properties" />
<property name="dataSource" ref="dataSource" />
<property name="overwriteExistingJobs" value="true" />
<property name="autoStartup" value="false" />
</bean>
这个bean在Spring启动的时候就会创建一个SchedulerFactoryBean实例,它会根据你的配置的属性,创建一个schedule实例。
quartz的基本配置,报名线程池的设置,最大的连接数等
<property name="configLocation" value="/WEB-INF/classes/quartz.properties" />
需要用到jdbc store来持久化存储,后面会详细解释
<property name="dataSource" ref="dataSource" />
需要overwrite已经存在的job,如果需要动态的修改已经存在的job,就需要设置为true,否则会以数据库中已经存在的为准
<property name="overwriteExistingJobs" value="true" />
是否自动启动,这个比较好理解
<property name="autoStartup" value="true" />
4.如何配置Quartz的jdbc 持久化。
Quartz本身就提供了两种做法来做jdbc的持久化。一个是在Quartz.properties你们配置,具体可以参考它的example。
另一个就是自己在Spring中配置SchedulerFactoryBean的datasource属性,你需要在Spring中创建一个datasource的bean。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName"><value>org.postgresql.Driver</value></property>
<property name="url"><value>jdbc:postgresql://127.0.0.1:3306/dms</value></property>
<property name="username"><value>username</value></property>
<property name="password"><value>password</value></property>
</bean>
我在使用中,第一种方式,一直没有成功,无法连接上数据库,检查了各种原因,还是没有发现root cause。
但第二张方式,没有任何问题。
Quartz与Spring集成的更多相关文章
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类.很显然,第二种方式远比第一种方式来的 ...
- Quartz与Spring集成(二)
一.获取quartz详情jar <!-- quartz 的jar --> <dependency> <groupId>org.quartz-scheduler< ...
- quartz和spring集成使用一例子【我】
首先在spring配置文件中增加: <!-- 调度器 --> <bean name="scheduler" lazy-init="false" ...
- Quartz 与 Spring集成
http://www.cnblogs.com/pigwing/archive/2011/07/12/2104002.html http://blog.arganzheng.me/posts/quart ...
- 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 ...
- Spring集成Quartz完成定时任务
在JavaEE系统中,我们经常会用到定时任务,比如每天晚上凌晨之后跑批处理或者是每天某个时刻群发消息等等. 我们可以使用java.util.Timer结合java.util.TimerTask来去完成 ...
- Spring集成的Quartz 并发
以前经常在任务调度程序中使用Spring集成的Quartz,这种方式可以用简单的声明式配置即可实现定时任务,并结合了Spring自身的Bean的管理功能,非常方便.配置样本如下: <bean i ...
随机推荐
- SSIS ->> Logging
SSIS提供了Event Handler之外的另一种方法捕捉Event和获取需要的信息,这种方法是Logging.SSIS的Logging针对不同的组件可以提供比Event Handler更多的Eve ...
- Mybatis SqlSessionTemplate 源码解析
As you may already know, to use MyBatis with Spring you need at least an SqlSessionFactory and at le ...
- ADODB.Connection 错误 '800a0e7a'。。
今天帮同学调程序的时候发现的:错误提示如下: ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. /hua1/manage/inc/conn.asp, ...
- Spring高级事务管理难点剖析
1Spring事务传播行为 所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播.Spring支持7种事务传播行为 PROPAGATION_REQUIRED(加入已有事务) 如果当前没 ...
- centos6.5 中文
之前在网上查了不少资料,很多网友在网上都说,在shell命令下输入: # vi /etc/sysconfig/i18n 然后修改LANG="en_US.UTF-8" ...
- 错误 -force-32bit 与 ANDROID_EMULATOR_FORCE_32BIT=true
1,配置环境变量, 加上ANDROID_EMULATOR_FORCE_32BIT=true 2,在AS中启动模拟器用下面方法 在你要运行的个工程右击->Run as -> Run conf ...
- 一、Oracle分析函数入门
分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值. 分析函数和聚合函数的不同 ...
- Android中GridView拖拽的效果【android进化三十六】
最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...
- bzoj4627: [BeiJing2016]回转寿司
权值线段树. 要求 L<=(s[i]-s[j])<=R (i<j). 的i和j的数量. 所以把前缀和s加入一棵权值线段树,每次询问满足条件的范围中的权值的个数. 权值线段树不能像普 ...
- WEBUS2.0 In Action - 搜索操作指南 - (2)
上一篇:WEBUS2.0 In Action - 搜索操作指南(1) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(3) 2. 使用Query Query是所有查询的基类, 它一 ...