spring中使用Quartz

网上看到很多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-FIR</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。。