java - 如何将 Quartz 调度程序连接到我的 Spring 上下文中?

标签 java spring quartz-scheduler

我有一个应用程序,我想在其中使用 Quartz Scheduler 对象。我已经阅读了有关此的 Spring 文档,他们建议像这样使用 SchedulerFactoryBean:

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

配置如下:

org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = MyQuartzScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
log4j.rootLogger=INFO, stdout
log4j.logger.org.quartz=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

现在,如果我想将 schedulerFactoryBean 注入(inject)到我的一个对象中,我会收到一个异常声明:

无法将 [org.quartz.impl.StdScheduler] 类型的构造函数参数值转换为所需类型 [org.springframework.scheduling.quartz.SchedulerFactoryBean]:

为什么我得到的是 StdScheduler 而不是 schedulerFactoryBean?我错过了配置步骤吗?

最佳答案

一个 SchedulerFactoryBean 是一个 FactoryBean 所以它 can't be used like a normal bean .当你将它注入(inject)到其他 bean 中时,Spring 将注入(inject)工厂生成的 org.quartz.Scheduler 对象,它不会注入(inject)工厂本身。

通常以它产生的对象命名工厂 bean,因为当您引用它时它会更好地阅读。例如:

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

然后你可以像这样配置一个需要Scheduler的对象:

<bean id="beanThatNeedsScheduler" class="beanThatNeedsScheduler">
    <!-- Will inject a Scheduler not a SchdulerFactoryBean -->
    <property name="scheduler" ref="scheduler" />
</bean>

或者使用注解:

@Component
public class BeanThatNeedsScheduler {

    @Autowired;
    private Scheduler scheduler

    ...
}

关于java - 如何将 Quartz 调度程序连接到我的 Spring 上下文中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557066/

相关文章:

java - Quartz调度程序中断工作?

java - Spring Quartz Scheduler 竞争条件

Swift 中等效的 Java 接口(interface)

java - 如何在 Wicket 口中打印文本

JavaRx on ErrorReturn 返回不同的类型

java - Spring 多个打开的连接

spring - Tomcat 9 Connector如何监听127.0.0.1反向代理到Win。具有私有(private) ServerName 的 Apache 2.4

java - Apache FileUtils 比较两个相同的 pdf 时不断返回 false

spring - 无法推断基本 URL。当使用动态 servlet 注册或 API 位于 API 网关后面时,这种情况很常见

java - quartz 线程执行并行还是顺序?