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-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中唯一的名字。否则会有些项目的定时任务无法执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值