您可以通過過濾的 AdaptableJobFactory來執行屬性/構造函數注入您的工作,並註冊您的新JobFactory而不是默認的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的整合進度。
嘿感謝很多關於這一點,我會嘗試一下今晚回來後我的結果。乾杯! – Richard
曾經玩過這個遊戲,但昨晚不能完成它的工作(雖然時間已晚)。放棄之後,我去了一個methodInvokingJob,它在我的一個服務上執行了一個方法,但後來我開始用我的spring上下文運行到循環引用。哎呀。今晚將繼續嘗試,雖然 – Richard
我更新了帖子,希望現在更容易遵循。 – Andreas