为什么石英不重新启动作业?

Why does quartz don't restart the jobs?

我在做一个web应用,使用Spring3.0.5.RELEASE+quartz 1.8.6,MySQL5.5用于存储调度信息。当我重新启动 tomcat 时,石英已重新启动,但它不会重新运行作业。比如我有一个job打印了10次"aaa",我在运行了3次后重启了tomcat,剩下的7次就不会打印了。 下面是 spring 配置文件,所有的作业和触发器都将由用户创建,所以只有一个 bean。

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false"></bean>

下面是quartz.properties。

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate  
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.tablePrefix = QRTZ_  
org.quartz.jobStore.isClustered = false  
# Configure Datasources 
#============================================================================ 
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver 
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz1x?useUnicode=true&characterEncoding=utf8 
org.quartz.dataSource.myDS.user = root 
org.quartz.dataSource.myDS.password =111111
org.quartz.dataSource.myDS.maxConnections = 10 

Spring感染了Scheduler,下面是代码

        JobDetail jobDetail = new JobDetail("jName","gName", NewJob.class);
        SimpleTrigger simpleTrigger = new SimpleTrigger("jName1","gName1");
        simpleTrigger.setStartTime(new Date());
        simpleTrigger.setRepeatInterval(3000);
        simpleTrigger.setRepeatCount(10);

        scheduler.scheduleJob(jobDetail, simpleTrigger);

NewJob.java

public class NewJob implements Job {

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
    System.out.println(new Date());
}

}

如果我不用spring,而是用servlet(org.quartz.ee.servlet.QuartzInitializerServlet),就没有问题。

Spring不读取quartz.properties默认,你应该像下面这样在bean中写配置文件。

    <bean id="scheduler"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
    lazy-init="false">
    <property name="configLocation" value="classpath:quartz.properties" />
    </bean>