如何确保使用了 quartz.properties?

问题描述 投票:0回答:4

我在 quartz.properties 文件中设置了以下属性:

org.quartz.threadPool.threadCount = 60
org.quartz.scheduler.batchTriggerAcquisitionMaxCount = 60

但是,由于某些原因,显然它没有生效。因为当我启动我的应用程序时,日志显示它仍在池中使用 1 个线程:

[main] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor 
[main] INFO org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 
[main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.1.1 created. 
[main] INFO org.quartz.simpl.RAMJobStore - RAMJobStore initialized.
[main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.1.1) 'QuartzScheduler' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0   
Using **thread pool 'org.quartz.simpl.SimpleThreadPool' - with 1 threads.**

我知道,quartz.properties 需要在类路径中才能找到。我刚刚做到了。 未检测到此文件的任何其他原因?或者它被检测到但线程数设置不正确?

谢谢

java threadpool quartz-scheduler
4个回答
12
投票

对于那些使用 Spring + Quartz 和

quartz.properties
文件不工作的人(即在启动应用程序时被忽略):

由 Spring Factory Bean (

org.quartz.Scheduler

) 实例化的 
Quartz Scheduler (
org.springframework.scheduling.quartz.SchedulerFactoryBean
) 默认情况下不会从类路径中读取
quartz.properties
文件,如 Quartz 文档中所述 - 您需要手动设置引用:

[在 Java 配置的情况下]:

@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    schedulerFactoryBean.setConfigLocation(new ClassPathResource("quartz.properties"));
    // ...
}

[如果是 XML 配置]:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="configLocation" value="classpath:quartz.properties" />
    // ...
</bean>

4
投票

oops,我发现了问题,实际上代码是通过在代码中创建属性类的实例来覆盖属性文件配置。所以答案是这一行:

sf = new StdSchedulerFactory("conf/quartz.properties");


2
投票

如果有人还在寻找答案,他们可以使用下面的代码片段

@Bean                                                                           
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
    SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
    scheduler.setTriggers(jobOneTrigger());
    scheduler.setQuartzProperties(quartzProperties());
    scheduler.setJobDetails(jobOneDetail());
    return scheduler;
}

@Bean
public Properties quartzProperties() throws IOException {
    PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
    propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
    propertiesFactoryBean.afterPropertiesSet();
    return propertiesFactoryBean.getObject();
}

0
投票

如果以前的解决方案不适合您,请将您的属性文件移动到项目的 /resource 目录中。然后你的配置将被默认拾取。

© www.soinside.com 2019 - 2024. All rights reserved.