spring + Quartz 定时任务

xiaoxiao2026-06-13  10

网上看到很多Quartz的帖子,说得都很不错,关于他的由来和原理我这里就不累赘了。我主要想解决的事情是一开始我遇到的无法自动启动的问题。

用例子说话。

一、写一个自定义的类,继承至Object就可以了。并且可以配合set方法,用于在spring中注入。

 

public class PoolingSendMail {                 public static Logger poolingSendMailLog = Logger. getLogger (PoolingSendMail. class );                 private String message;                 public void setMessage ( String message ) {                 this. message = message;         }         public void sendMail ( ) {                 System. out. println (message );         } }

二、配置文件

在spring的配置文件中,增加下面的配置

        <bean id="poolingSendMail" class="com.wtmec.RFQ.pooling.PoolingSendMail">                 <property name="message">                         < value>nihao</value>                 </property>         </bean>         <bean id="poolingDetail"                 class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">                 <property name="targetObject">                         <ref bean="poolingSendMail"/>                 </property>                 <property name="targetMethod">             <value>setMessage </value>         </property>         </bean>         <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">                 <property name="jobDetail">                         <ref bean="poolingDetail"/>                 </property>                 <property name="cronExpression">                         <value>* 5 1 ? * MON-FRI </value>                 </property>         </bean>         <bean id ="schedulerFactory" lazy-init="false" autowire="no"                 class="org.springframework.scheduling.quartz.SchedulerFactoryBean">                 <property name="triggers">                         <list>                                 <ref local="cronTrigger" />                         </list>                 </property>                 <property name="autoStartup" value="true"/>         <property name="schedulerName" value="cronScheduler" />         </bean>

 

经过这样的简单配置就可以让程序在周一到周五的凌晨1点5分的某个时刻执行程序了。(当然这里只是简单的system.out动作而已)

刚开始的时候,一直困扰我的是我在启动tomcat后,无法自动启动定时任务。但是我如果在java中直接获取spring配置文件,并获取我“schedulerFactory” 是可以运行的。

后来问题终于找到。是刚开始的时候,我没有落了几个需要设置的地方

1. bean “schedulerFactory“ 的lazy-init="false”。

2. bean “schedulerFactory“ 的两个属性

          <property name="autoStartup" value="true"/>

         <property name="schedulerName" value="cronScheduler" />

完成上面的设置后,程序就可以自动启动了。yeah。give me five。。

 

注:在cronExpression部分,最好不要在秒的部分使用星号(*),这样似乎会在某一时刻内运行多次。我把它改成特定的描述就OK了。例如是:0

 

另外需要注意的是:如果你有多个项目使用quartz,这时候,需要把org.springframework.scheduling.quartz.SchedulerFactoryBeanschedulerName改成tomcat中唯一的名字。否则会有些项目的定时任务无法执行。

转载请注明原文地址: https://www.6miu.com/read-5050085.html

最新回复(0)