在Spring中將bean引用注入Quartz作業(yè)?我設(shè)法在Spring中使用JobStoreTX持久存儲來配置和調(diào)度Quartz作業(yè)。我不使用Spring的Quartz作業(yè),因?yàn)槲倚枰谶\(yùn)行時(shí)動(dòng)態(tài)調(diào)度它們,并且我發(fā)現(xiàn)Spring與Quartz集成的所有示例都是對Spring配置文件中的shcedules進(jìn)行硬編碼...無論如何,這里是如何我安排工作:JobDetail emailJob = JobBuilder.newJob(EMailJob.class).withIdentity("someJobKey", "immediateEmailsGroup").storeDurably().build();SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger() .withIdentity("someTriggerKey", "immediateEmailsGroup").startAt(fireTime).build();// pass initialization parameters into the jobemailJob.getJobDataMap().put(NotificationConstants.MESSAGE_PARAMETERS_KEY, messageParameters);emailJob.getJobDataMap().put(NotificationConstants.RECIPIENT_KEY, recipient);if (!scheduler.checkExists(jobKey) && scheduler.getTrigger(triggerKey) != null) { // schedule the job to runDate scheduleTime1 = scheduler.scheduleJob(emailJob, trigger);}EMailJob是一個(gè)簡單的工作,它使用Spring的JavaMailSenderImpl類發(fā)送電子郵件。public class EMailJob implements Job {@Autowiredprivate JavaMailSenderImpl mailSenderImpl;
public EMailJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
....
try {
mailSenderImpl.send(mimeMessage);
} catch (MessagingException e) {
....
throw new JobExecutionException("EMailJob failed: " + jobKey.getName(), e);
}
logger.info("EMailJob finished OK");}問題是我需要在我的EMailJob類中獲得對該類的實(shí)例(JavaMailSenderImpl)的引用。當(dāng)我嘗試像這樣注入它:@Autowiredprivate JavaMailSenderImpl mailSenderImpl;它沒有被注入 - 引用是NULL。我假設(shè)發(fā)生了這種情況,因?yàn)閷?shí)例化EMailJob類不是Spring,但是Quartz和Quartz對依賴注入一無所知......那么,是否有某種方法可以強(qiáng)制進(jìn)行這種注射?謝謝!
3 回答
精慕HU
TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
我只是SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);作為我的Job.execute(JobExecutionContext context)方法的第一行。
添加回答
舉報(bào)
0/150
提交
取消
