spring中使用Quartz
网上看到很多Quartz的帖子,说得都很不错,关于他的由来和原理我这里就不累赘了。我主要想解决的事情是一开始我遇到的无法自动启动的问题。
用例子说话。
一、写一个自定义的类,继承至Object就可以了。并且可以配合set方法,用于在spring中注入。
二、配置文件
在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>
<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。。