java-spring和quartz

来源:互联网 发布:农村淘宝合伙人怎么样 编辑:程序博客网 时间:2024/06/09 00:08

这两天一直琢磨着学学spring和quartz,主要是为了能写一个贴合自己需要的监控程序。同时也熟悉一下系统用到的技术。其中绕了不少弯路,昨晚弄到1点多,都没搞定,今天终于算是整出了hello world。由于我用的是eclipse,所以spring需要自己配置,如果是myeclipse,那基本上不用看我的帖子了

首先,让spring框架运转起来,可以参看一下:《spring在web应用中的配置》。

1、下载spring、quartz。网址这里就不贴了,网上到处都有,只是要注意一下版本,不同版本spring的web.xml配置不一样。

2、把spring配置到工程中,把spring.jar(或者spring-sources.jar)复制到web-inf/lib目录下,让系统能找到该类。

3、编辑web.xml,把spring的servlet配置到系统,让spring框架能运转起来。配置如下:

1servlet>

2servlet-name>springservlet-name>

3servlet-class>org.springframework.web.context.contextloaderservletservlet-class>

4load-on-startup>1load-on-startup>

5servlet>

6servlet-mapping>

7servlet-name>springservlet-name>

8url-pattern>*.dourl-pattern>

9servlet-mapping>

需要注意的是,第3行的内容根据spring的版本不同似乎要有不同配置,我用的是2.5.5版,如果是低版本必须配置成下面这样,两者不能兼容。

servlet-class>org.springframework.web.servlet.dispatcherservletservlet-class>

4、在web-inf目录下新建spring的配置文件,同样的因为版本不同默认的配置文件名也不一样,低版本的是:spring-servlet.xml,2.5.5的是:applicationcontext.xml。这个文件名也可以不同,可以在web.xml中加入配置:

context-param>

param-name>contextconfiglocationparam-name>

param-value>/web-inf/spring.xmlparam-value>

context-param>

5、根据spring的协议配置xml,让spring 运行起来,这个不属于这篇帖子讨论的内容。

然后就是配置quartz了,spring内置了quartz,只要通过简单的配置applicationcontext.xml及少量编程就能让quartz在spring框架下运转。quartz的介绍挺多的,这就提两点:一是quartz是任务调度的框架,有两种调度方式:simple和cron模式,simple方式和timertask类似,采用设置interval方式进行调度,而cron可以特有的语法很详细的定制调度执行时间。详细介绍请见《spring使用quartz配置调度事务》。另外一点就是注入到quartz框架的任务方式有两种,一种是调用特定方法,这种方法很简单,不要集成quartz的类,可以通过配置文件直接调用的自己编写的类,我用的就是这种方法;另外一种就是继承quartzjobbean类来完成任务的调度,这种方法虽然复杂了一些,但更灵活,请参看《在spring中使用quartz调度器》。下面是我的步骤:

1、quartz内置在spring中,不需要再单独下载,只需要配置applicationcontext.xml如下:

1 beans>

2 bean id="firstjob" class="com.mc.job.first">bean>

3定义目标bean和bean中的方法-->

4 bean id="job" class="org.springframework.scheduling.quartz.methodinvokingjobdetailfactorybean">

5property name="targetobject">

6ref local="firstjob"/>

7property>

8property name="targetmethod">

9要执行的方法名称-->

10value>countvalue>

11property>

12 bean>

13 定义触发的时间-->

14 bean id="cron" class="org.springframework.scheduling.quartz.crontriggerbean">

15property name="jobdetail">

16refbean="job"/>

17property>

18property name="cronexpression">

19value>0-59 * * * * ?value>

20property>

21 bean>

22管理触发器-->

23 bean autowire="no"class="org.springframework.scheduling.quartz.schedulerfactorybean">

24property name="triggers">

25list>

26ref local="cron"/>

27list>

28property>

29 bean>

30 beans>

2、编写自己的类first,如下:

1package com.mc.job;

2

3public class first {

4static long count=0;

5public first()

6{

7system.out.println("bean initialized.");

8}

9public void dofirst()

10{

11count();

12}

13public void count(){

14count++;

15system.out.print("count=");

16system.out.println(count);

17}

18}

需要说明的有几点:

1、自己的first类作为一个bean在spring中生成,并注入到org.springframework.scheduling.quartz.methodinvokingjobdetailfactorybean类中执行相关方法,需要执行的任务在该方法中实现,我的代码只是输出了一个数字。

2、触发时间需要填写表达式,该表达式的格式网上很多,我这就不再说了,程序中是每秒调用一次。

3、调试的过程中发现报出了异常,找不到某个类,开始百思不得其解,后来才反应过来,在其他quartz的介绍中提到quartz用到了其他第三方组件,需要注意这些组件与工程自身用到的相同组件间的版本冲突,我的情况正好相反,我没用到哪些组件,所以报出异常,把quartz中相关的jar包复制到lib目录下解决问题。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击