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

相关推荐

    关于spring中quartz的配置

    在Spring配置文件(如`applicationContext.xml`)中,定义`SchedulerFactoryBean`来实例化和配置Quartz Scheduler: ```xml &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz....

    Spring中Quartz的配置

    ### Spring中Quartz的配置详解 #### 一、前言 Spring框架因其强大的功能和灵活性在企业级应用开发中占据了一席之地。其中,对于定时任务的支持,Spring结合了Quartz这一优秀的开源任务调度框架,提供了更为灵活和...

    spring3配置quartz定时任务

    在Java开发中,Spring框架是不可或缺的一部分,而Quartz则是一个强大的作业调度库,用于创建、调度和执行作业。本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务...

    spring和quartz的定时器的启动和停止例子

    本篇将深入探讨如何在Spring中启动和停止Quartz定时器。 首先,我们需要理解Spring和Quartz的基本概念。Spring是一个强大的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。而...

    spring 配置quartz需要的jar包

    2. **配置Quartz**:在Spring的配置文件(如`applicationContext.xml`)中,声明一个`SchedulerFactoryBean`,这是Spring提供的用于管理Quartz Scheduler的bean。 ```xml &lt;bean id="scheduler" class="org.spring...

    spring注解Quartz定时执行功能

    在Spring框架中集成Quartz库...当Spring应用启动时,Quartz调度器会自动启动并按照预定的计划执行任务。在实际开发中,你可以根据需求调整定时任务的执行周期、并发控制和数据持久化策略,以满足复杂的定时任务需求。

    Quartz2.2.1基于Spring注解方式配置Quartz

    在Spring Boot应用中,`@EnableScheduling`会自动启动调度器。如果你是在非Spring Boot项目中,需要在主类或配置类中手动启动调度器: ```java public class Application { public static void main(String[] ...

    spring3整合quartz1.8和spring3整合quartz2.2两个版本示例

    6. **配置 Scheduler**:创建 `SchedulerFactoryBean`,它是 Spring 提供的用于管理 Quartz Scheduler 的工具类,通过设置 JobDetails 和 Triggers,将它们绑定到 Scheduler 中。 7. **启动 Scheduler**:在应用...

    spring+quartz demo

    在 Spring 的配置文件(如 `applicationContext.xml`)中,我们需要引入 Quartz 的配置,并声明一个 `SchedulerFactoryBean` 来实例化和配置 Quartz Scheduler。这通常包括定义数据源、JobDetail 和 Trigger。 2. ...

    spring多个定时任务quartz配置

    2. **配置Spring**:在Spring的配置文件(如applicationContext.xml)中,我们需要配置一个SchedulerFactoryBean,这是Spring管理Quartz Scheduler的主要方式。示例配置如下: ```xml &lt;bean id="...

    Spring3.2.3+Quartz2.2 整合配置

    接下来,在Spring的配置文件(如`applicationContext.xml`)中,配置Quartz的SchedulerFactoryBean以及JobDetail和Trigger。下面是一个基本的配置示例: ```xml &lt;bean id="scheduler" class="org.springframework....

    浅谈Spring中的Quartz配置

    在Spring中配置Quartz,我们通常会创建一个Spring配置文件,例如`quartz-config.xml`,并在其中定义相关的Bean。以下是一个基本的配置示例: ```xml &lt;bean id="schedulerFactoryBean" class="org.springframework....

    spring java 定时器 执行两次 quartz

    2. **配置错误**:Spring配置中的`@Scheduled`注解或Quartz配置可能设置了错误的触发策略,使得任务被重复触发。 3. **线程安全**:如果你的任务逻辑不是线程安全的,可能会因为并发执行导致问题。 4. **Spring重启*...

    quartz整合springbatch动态集群定时实现mysql参考

    1. **Quartz配置**:定义了调度器、作业和触发器的配置,可能使用了`org.springframework.scheduling.quartz.SchedulerFactoryBean`来初始化Quartz。 2. **Spring Batch配置**:包含了作业和步骤的定义,以及读取和...

    quartz和spring-quartz

    2. **XML配置**: 在Spring的配置文件中,你可以声明Job和Trigger,然后通过SchedulerFactoryBean来创建和配置Scheduler。这种方式简化了代码,使得任务配置更加灵活。 3. **编程式API**: 除了XML配置,还可以使用...

    spring集成quartz集群配置

    在Spring配置文件中,我们可以声明这些bean并关联它们,这样Spring就能自动管理和触发Quartz任务。 集群配置的关键在于确保所有节点都能共享相同的任务状态和调度信息。Quartz通过使用数据库存储作业和触发器来实现...

    Spring + Quartz配置实例(转载)

    2. **Spring配置文件**:在Spring的XML配置文件中,我们需要声明一个`SchedulerFactoryBean`,它是Spring对Quartz调度器的封装。通过这个bean,我们可以配置Quartz的相关属性,如JobStore类型(内存或数据库存储),...

    转:spring多个定时任务quartz配置

    7. **启动和关闭Quartz**:在应用启动时,Spring会自动初始化并启动调度器。你也可以通过`SchedulerFactoryBean`的`start()`和`shutdown()`方法手动控制。 通过以上步骤,你可以在Spring应用中配置和运行多个Quartz...

    spring 集成quartz 用数据库实现quartz的集群

    2. 在Spring配置文件中创建`SchedulerFactoryBean`,配置数据源和Quartz属性。 3. 配置`quartz.properties`,指定数据库连接和Quartz参数。 4. 设计并实现`Job`和`Trigger`,定义任务逻辑和执行时机。 5. 在集群环境...

    定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)

    在Spring配置文件(如`applicationContext.xml`)中配置Quartz的SchedulerFactoryBean。 ```xml &lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; ...

Global site tag (gtag.js) - Google Analytics