spring与quartz集成使用

本文详细介绍如何在Spring环境中集成Quartz调度器,包括实现类的编写、配置文件的设置及web.xml的调整。并针对实践中遇到的问题提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在web环境下,通常需要使用一些定时执行的操作(如定时报表生成,定期定时数据统计,定时短信发送等等) 。此时可以应用quartz调度器来实现。
          spring与quartz集成使用。Quartz中对于spring的service方法调用注意区别以往的作业调度方式。
       其他调度器的使用:
              1、数据库自身调度任务,定时触发
              2、继承TimerTask,实现run方法。
              3、其他自己实现

 

简要介绍下spring与quartz集成使用:

1、实现类需要继承QuartzJobBean类,实现executeInternal方法即可

2、创建applicationContext-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="job" class="org.springframework.scheduling.quartz.JobDetailBean">
   <property name="jobClass" value="cn.com.xinli.radar.job.SendSmsJob"/> 
   <property name="jobDataAsMap">  
          <map>  
              <entry key="sendSmsService">
               <ref bean="sendSmsService" />
              </entry>   
          </map>   
   </property>
  </bean>
  
  <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
   <property name="jobDetail" ref="job"/>
   <property name="cronExpression" value="0/3 * * * * ?"/>
  </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>

 

3、再web.xml文件中增加如下代码:

     <servlet>
  <display-name>Quartz Initializer Servlet</display-name>
  <servlet-name>QuartzInitializer</servlet-name>
  <servlet-class>
   org.quartz.ee.servlet.QuartzInitializerServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 

完成上面三个步骤,quartz调度器就ok啦,很简单。但是在实践中碰到2个问题,再编码时需要注意

      1、当不需要与spring集成的话,可以让实现类直接继承 job类即可。与spring集成,我们需要在实现类中

调用spring的service方法,service方法通过IOC实现依赖注入,此时为了调用service方法,我们必须继承

QuartzJobBean类文件,并且参照配置文件applicationContext-quartz.xml中JobDetailBean部分的配

置将queryCustService注入。否则调度器实现类中无法调用service方法。

      2、executeInternal方法内部可以调用service对象。但是实现类中其他抽象的private方法中无法调用

到service对象,必须通过executeInternal方法内部将service所谓参数传递至private方法内部方可使用。

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值