0 0

Sping 中配置Quartz,SchedulerFactoryBean不能自动启动10

项目中有些定时任务,参考网上的一个小例子配置了一下,但是存在问题,定时任务不能自动起来。

先简单介绍一下:
1、Java代码:
package com.demo.quartz;

import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HiJob implements Job  {
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        System.out.println("This is HiJob, Run time is " + new Date());
    }
}



2、applicationContext.xml内容:
  <?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
	>

    <bean id="HiJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.demo.quartz.HiJob"/>
        <property name="jobDataAsMap">
            <map>
                <entry key="size" value="10"></entry>
            </map>
        </property>
        <property name="applicationContextJobDataKey" value="applicationContext"/>
    </bean>
    
    <bean id="HiJobScheduledTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="startDelay" value="20000"/>
        <property name="repeatInterval" value="60000"/>
        <property name="jobDetail" ref="HiJobDetail"/>
    </bean>
    
    <bean id="QuartzJobFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="HiJobScheduledTask"/> 
            </list>
        </property>
       [color=red] <property name="autoStartup" value="true"/>[/color]
       [color=blue] <property name="schedulerName" value="cronScheduler" />[/color]
    </bean>

</beans>


3、测试代码:
package com.demo.quartz;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QuartzTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        
        ApplicationContext context = 
            new ClassPathXmlApplicationContext("applicationContext.xml");
        Scheduler a = (Scheduler) context.getBean("QuartzJobFactory");
        try {
            a.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}



问题是:我现在单独运行这个测试类,这个每隔一定时间就执行一次的任务是可以正常执行的,但是当我把这个小应用部署在Tomcat下,启动Tomcat时不能自动启动Scheduler(SchedulerFactoryBean),所以说应该是这个:
    <property name="autoStartup" value="true"/>配置没有起作用,
    Spring的论坛上有个小的帖子提到过这个问题(http://forum.springsource.org/showthread.php?t=23716)。
    我一开始也没有加 <property name="schedulerName" value="cronScheduler" />这个属性,以为加上就好了呢,但是现在加上也不起作用。
    大家有没有碰到过,请解释一下,非常感谢!
问题补充:
项目中有些定时任务,参考网上的一个小例子配置了一下,但是存在问题,定时任务不能自动起来。

先简单介绍一下:
1、Java代码:
package com.demo.quartz;

import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HiJob implements Job  {
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        System.out.println("This is HiJob, Run time is " + new Date());
    }
}



2、applicationContext.xml内容:
  <?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
	>

    <bean id="HiJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.demo.quartz.HiJob"/>
        <property name="jobDataAsMap">
            <map>
                <entry key="size" value="10"></entry>
            </map>
        </property>
        <property name="applicationContextJobDataKey" value="applicationContext"/>
    </bean>
    
    <bean id="HiJobScheduledTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="startDelay" value="20000"/>
        <property name="repeatInterval" value="60000"/>
        <property name="jobDetail" ref="HiJobDetail"/>
    </bean>
    
    <bean id="QuartzJobFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="HiJobScheduledTask"/> 
            </list>
        </property>
       <property name="autoStartup" value="true"/>
      <property name="schedulerName" value="cronScheduler" />
    </bean>

</beans>


3、测试代码:
package com.demo.quartz;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QuartzTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        
        ApplicationContext context = 
            new ClassPathXmlApplicationContext("applicationContext.xml");
        Scheduler a = (Scheduler) context.getBean("QuartzJobFactory");
        try {
            a.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}



问题是:我现在单独运行这个测试类,这个每隔一定时间就执行一次的任务是可以正常执行的,但是当我把这个小应用部署在Tomcat下,启动Tomcat时不能自动启动Scheduler(SchedulerFactoryBean),所以说应该是这个:
    <property name="autoStartup" value="true"/>配置没有起作用,
    Spring的论坛上有个小的帖子提到过这个问题(http://forum.springsource.org/showthread.php?t=23716)。
    我一开始也没有加 <property name="schedulerName" value="cronScheduler" />这个属性,以为加上就好了呢,但是现在加上也不起作用。
    大家有没有碰到过,请解释一下,非常感谢!
问题补充:
问题已经解决:
 <bean  lazy-init="false" autowire="no" id="HiQuartzJobBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
               <!--  <ref bean="MyJobScheduledTask"/>  -->
                <ref bean="HiJobScheduledTask"/> 
            </list>
        </property>
        <!-- 设置是否Spring容器初始化后马上启动Scheduler,默认为true。如果设置为false则需要手工启动Scheduler -->
        <property name="autoStartup" value="true"/>
           <property name="schedulerName" value="cronScheduler" />
    </bean>



这个地方要配一下,否则不能自动启动!
lazy-init="false"
2009年4月20日 17:39

3个答案 按时间排序 按投票排序

0 0

2012年9月11日 15:17
0 0

在spring中只用过jdk timer,不需要实现任何特定的接口,直接配置就行了。

2009年4月20日 17:46
0 0

http://hi.baidu.com/maomaoyusp/blog/item/b55b8d180f795cb24aedbc28.html

2009年4月20日 17:45

相关推荐

    Spring3.2.4+Quartz2.2.0 Demo

    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;!-- 启动触发器的配置结束 --&gt; &lt;!-- 调度的配置开始 --&gt; &lt;!-- quartz-1.8以前的配置 class="org.spring...

    QuartzSpring

    org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean org.springframework.scheduling.quartz.CronTriggerBean org.springframework.scheduling.quartz.SchedulerFactoryBean spring中的...

    Spring2.0+quartz1.8定时执行任务内含Cron表达式生成器

    现有需求需要每天早上2点和下午5点执行一个方法Synchronization.run(): &lt;!-- 调用频率设置 每天上午2点和下午5点 ... class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/bean&gt;

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,Spring+Quartz调度,FunctionCharts图像化工具

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,... &lt;bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/beans&gt;

    java quartz任务示例

    java quartz任务示例,只能用炫酷来形容,感兴趣就下载看看吧

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    quartz 定时任务

    &lt;beans xmlns="http://www.springframework.org/schema/beans" ... xmlns:context=... &lt;bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/beans&gt;

    spring定时器轻松搞定

    java类代码: import org.quartz.JobExecutionException; import org.springframework....我用的spring.jar,有些低版本的Spring可能找不到.quartz.QuartzJobBean类, 另外加入一个quartz-all-1.6.0.jar包就OK

    spring定时任务

    spring定时任务 xmlns="http://www.springframework.org/schema/beans" ...&lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/beans&gt;

    Spring 2.0 开发参考手册

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    springjdbc

    springmvc 框架整合 ... &lt;bean id="sfb2" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;ref bean="querytestControllerTrigger" /&gt; &lt;/list&gt; &lt;/property&gt; &lt;/beans&gt;

    Spring API

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    spring chm文档

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    quartz-hipster-entities

    您只需要添加带有库的jar文件,并且Spring上下文中具有SchedulerFactoryBean。 库提供了简单的Rest API,可用于从数据库检索数据并将其作为JSON返回如何好的,但是如何使用呢? 您唯一需要做的就是将库添加为依赖项...

    MethodInvokingJobDetailFactoryBean.java

    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;property name="applicationContextSchedulerContextKey" value="applicationContext"&gt;&lt;/property&gt; ...

Global site tag (gtag.js) - Google Analytics