我认为我的QuartzJobObject不能注入任何DAO或其他Spring托管对象,这样想对吗?
我希望我能做这样的事情(orderService是我想要注入的东西):
<object name="checkPendingOrdersJob" type="Spring.Scheduling.Quartz.JobDetailObject, Spring.Scheduling.Quartz">
<property name="JobType" value="Munch.ScheduledTasks.CheckPendingOrdersJob" />
<!-- We can inject values through JobDataMap -->
<property name="JobDataAsMap">
<dictionary>
<!--entry key="UserName" value="Alexandre" /-->
</dictionary>
</property>
<property name="orderService" ref="orderService"/>
</object>我知道...which没有任何意义,因为它的类型。但是,我可以通过某种方式注入一些DAO、服务等。不过我还是想不通。我该怎么做呢?
发布于 2011-09-26 16:53:57
您可以通过覆盖AdaptableJobFactory的CreateJobInstance来将属性/构造函数注入到您的工作中,并注册新的JobFactory而不是默认的。
传入的TriggerFiredBundle为您提供了足够的信息来询问匹配作业的上下文(基于约定)。bundle.JobDetail.JobType.Name和bundle.JobDetail.JobType满足了我的需求,所以回到2008年,我最终得到了一些东西。就像这样(这个类是从AdaptableJobFactory派生出来的,它实现了IApplicationContextAware来注入上下文):
public class ContextAwareJobFactory : AdaptableJobFactory, IApplicationContextAware
{
private IApplicationContext m_Context;
public IApplicationContext ApplicationContext
{
set
{
m_Context = value;
}
}
protected override object CreateJobInstance( TriggerFiredBundle bundle )
{
return m_Context.GetObject( bundle.JobDetail.JobType.Name, bundle.JobDetail.JobType );
}
}您需要使用以下配置注册ContextAwareJobFactory:
<objects xmlns="http://www.springframework.net">
<!-- Some simple dependency -->
<object name="SomeDependency" type="Namespace.SomeDependency, Assembly" />
<!-- The scheduled job, gets the dependency. -->
<object name="ExampleJob" type="Namespace.ExampleJob, Assembly" singleton="false">
<constructor-arg name="dependency" ref="SomeDependency"/>
</object>
<!-- The JobDetail is configured as usual. -->
<object name="ExampleJobDetail" type="Spring.Scheduling.Quartz.JobDetailObject, Spring.Scheduling.Quartz">
<property name="JobType" value="Namespace.ExampleJob, Assembly"/>
</object>
<!-- The new JobFactory. -->
<object name="ContextAwareJobFactory" type="Namespace.ContextAwareJobFactory, Assembly" />
<!-- Set the new JobFactory onto the scheduler factory. -->
<object id="quartzSchedulerFactory" type="Spring.Scheduling.Quartz.SchedulerFactoryObject, Spring.Scheduling.Quartz">
<property name="JobFactory" ref="ContextAwareJobFactory"/>
</object>
</objects>我不知道有没有什么东西。ootb,因为这是在2008年开发的,我没有关注为quartz.net所做的集成进展。
https://stackoverflow.com/questions/7548481
复制相似问题