QuartZ--Spring中定时任务的实现
来源:互联网 发布:新东方烹饪怎么样知乎 编辑:程序博客网 时间:2024/05/08 02:02
最近在做一个拍卖项目中需要用到定时任务,我们采用的框架是spring mvc的,所以我在考虑集成定时任务方式的时候就选择了我们常用的Quartz,主要是因为他的实现方式比较简单,而且我们在做配置的时候也是方便修改的。
下面我们简单来说下Quartz应用的场景,在我们的项目中,存在一个拍品的有效时常,在这个有效的时常之内任何买家都是可以参与竞价的,当达到拍卖结束时间的时候我们就要通过运算使得这件拍品被价高者得到,这个时候需要生产订单等一系列的操作,那我们在我们的应用中如何知道某个拍品是否达到结束时间并且生成订单等相关操作,这个时候我们就需要定时调度去做这件事情,以帮助我们减少人工开销,说白了就是指定某件事情在什么时候去做!
下面我们就说说如何在我们的Spring框架中集成和使用Quartz,以方便我们程序的使用:
①由于我们是使用maven做项目依赖包管理的,所以我们第一步需要做的是新增我们的Quartz依赖!
<
dependency
>
<
groupId
>org.quartz-scheduler</
groupId
>
<
artifactId
>quartz</
artifactId
>
<
version
>1.8.0</
version
>
</
dependency
>
<
dependency
>
<
dependency
>
<
groupId
>commons-collections</
groupId
>
<
artifactId
>commons-collections</
artifactId
>
<
version
>20040616</
version
>
</
dependency
>
②前面也说道我们采用Quartz的目的是让他在指定的时间去帮助我们做指定的业务,所以我们需要写出我们的业务代码,我们的业务代码和其他的java类方法实现一样,属于同一层次下!
package
com.xiaocui.quartz;
public
class
QuartzJob {
public
void
work() {
//这里就是具体的业务代码实现方法,可以建立多个实现不同的业务!
try
{
logger.error(
"Hello, QuartZ 启动成功了!"
);
}
catch
(Exception e) {
logger.error(e, e);
}
}
}
③前面的两步我们把我们业务要做的事情都准备好了,那最后一步就是让我们的业务嵌入到现有的框架代码中,让他能在指定的时间去执行业务,前面我们说到采用Quartz的原因之一是因为他方便配置,下面我们就采用xml配置文件的方式让他嵌入到我们的框架中!
首先我们在我们的【resources】文件夹创建一个我们的xml文件,这里我命名为【spring-quartz.xml】,里面具体的实现内容如下:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<
beans
>
<!-- 要调用的工作类 -->
<
bean
id
=
"quartzJob"
class
=
"com.xiaocui.quartz.QuartzJob"
></
bean
>
<!-- 定义调用对象和调用对象的方法 这里就是定义具体的业务代码实现方法-->
<
bean
id
=
"jobtask"
class
=
"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
>
<!-- 调用的类 -->
<
property
name
=
"targetObject"
>
<
ref
bean
=
"quartzJob"
/>
</
property
>
<!-- 调用类中的方法 -->
<
property
name
=
"targetMethod"
>
<
value
>work</
value
>
</
property
>
</
bean
>
<!-- 定义触发时间 -->
<
bean
id
=
"doTime"
class
=
"org.springframework.scheduling.quartz.CronTriggerBean"
>
<
property
name
=
"jobDetail"
>
<
ref
bean
=
"jobtask"
/>
</
property
>
<!-- cron表达式 -->
<
property
name
=
"cronExpression"
>
<
value
>0 0/1 * * * ?</
value
>
<!--这里采用的是QuartZ Cron表达式-->
</
property
>
</
bean
>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<
bean
id
=
"startQuertz"
lazy-init
=
"false"
autowire
=
"no"
class
=
"org.springframework.scheduling.quartz.SchedulerFactoryBean"
>
<
property
name
=
"triggers"
>
<
list
>
<
ref
bean
=
"doTime"
/>
</
list
>
</
property
>
</
bean
>
</
beans
>
通过上上面的spring-quartz.xml的配置我们的业务代码已经和quartz有了结合,但是这个时候我们的quartz还没有和Spring结合到一起,想要将他们结合到一起只需要一句代码就可以,就是在我们的web.xml启动项中添加启动就可以了,大致代码如下:
<
context-param
>
<
param-name
>contextConfigLocation</
param-name
>
<
param-value
>classpath:spring.xml,classpath:spring-mybatis.xml,classpath:spring-quartz.xml</
param-value
>
<!-- classpath:spring-quartz.xml 用于做任务调度 任务定时都可以 添加就执行-->
</
context-param
>
<
context-param
>
- QuartZ--Spring中定时任务的实现
- spring中使用quartz实现定时任务
- Spring定时任务的实现方式--Quartz
- spring+quartz定时任务的实现
- spring集成quartz:定时任务的实现
- Spring+Quartz实现定时任务
- spring+quartz实现定时任务
- Spring + Quartz 实现定时任务
- Quartz + Spring 实现定时任务
- spring+quartz实现定时任务
- spring+quartz实现定时任务
- Spring+Quartz实现定时任务
- Spring+quartz 实现定时任务
- spring+quartz实现定时任务
- Quartz定时任务+spring 实现
- Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查
- spring的quartz定时任务
- Spring定时任务的几种实现 spring框架 quartz spring spring-task 定时任务 注解
- 【poj 2352】Stars 题意&题解&代码(C++)
- CF236 B. Easy Number Challenge【求约数个数】
- 【poj 1182】 食物链 题解&代码(C++)
- 按引用传递的
- jQuery立即调用表达式
- QuartZ--Spring中定时任务的实现
- linux 命令route add default dev eth0和route add default gw * dev eth0的区别?
- 书已出,只要能帮助或影响1000人,也算是功德圆满
- arc/非arc转换及注意事项
- js的this指向
- 运行时的C程序
- 《软件架构设计》学习笔记--6--6大步骤2:领域建模
- #if defined和#if !defined(c语言的宏定义)
- Java LinkedList的实现原理