gpt4 book ai didi

spring - 如何在 Quartz Job 中使用 @Autowired?

转载 作者:IT老高 更新时间:2023-10-28 13:44:22 29 4
gpt4 key购买 nike

我正在使用带 Spring 的 quartz 我想在作业类中注入(inject)/使用另一个类我不知道如何正确地做到这一点

xml:

<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">

<!-- Scheduler task -->
<bean name="schedulerTask" class="com.mkyong.quartz.SchedulerTask" />

<!-- Scheduler job -->
<bean name="schedulerJob"
class="org.springframework.scheduling.quartz.JobDetailBean">

<property name="jobClass" value="com.mkyong.quartz.SchedulerJob" />

<property name="jobDataAsMap">
<map>
<entry key="schedulerTask" value-ref="schedulerTask" />
</map>
</property>
</bean>

<!-- Cron Trigger -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail" ref="schedulerJob" />
<property name="cronExpression" value="0/10 * * * * ?" />

</bean>

<!-- Scheduler -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="schedulerJob" />
</list>
</property>

<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>

</beans>

quartz 工作:

package com.mkyong.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SchedulerJob extends QuartzJobBean
{
private SchedulerTask schedulerTask;

public void setSchedulerTask(SchedulerTask schedulerTask) {
this.schedulerTask = schedulerTask;
}

protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {

schedulerTask.printSchedulerMessage();

}
}

要执行的任务:

package com.mkyong.quartz;

public class SchedulerTask {

public void printSchedulerMessage() {

System.out.println("Struts 2 + Spring + Quartz ......");

}
}

我想在任务类中注入(inject)另一个处理数据库的 DTO 类在任务中做一些数据库工作,怎么做?

最佳答案

在您的解决方案中,您在未由 Spring 实例化的类中使用 spring @Autowired 注释。如果您删除 @Autowired 注释,您的解决方案仍然有效,因为 Quartz 设置的是属性,而不是 Spring。

Quartz 将尝试将 JobDataMap 中的每个键设置为属性。例如。因为你有一个键“myDao” Quartz 会寻找一个名为“setMyDao”的方法并将键的值传递给该方法。

如果您希望 Spring 将 spring bean 注入(inject)到您的作业中,请创建一个 SpringBeanJobFactory 并将其设置到您的 SchedulerFactoryBean 中,并在您的 spring 上下文中使用 jobFactory 属性。

SpringBeanJobFactory javadoc:

Applies scheduler context, job data map and trigger data map entries as bean property values

关于spring - 如何在 Quartz Job 中使用 @Autowired?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4258313/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com