我正在尝试使用石英作业调度程序自动发送电子邮件。为此,我正在使用jobDataMap从完成cronTrigger的类传递到完成该工作的类中传递完成该工作所需的数据。但是,当我尝试访问应使用jobDataMap传递的数据时,它始终返回null。任何人都有什么想法可能出问题吗?这是我初始化触发器的类中的代码:
trigger = new CronTrigger("SendReportEmailsTrigger", "CronTriggerGroup", "0 0/1 * * * ?");
List < UserDetails> aList = customerDetailsService.getUsersConfiguredForEmailedReports();
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("service", reportService);
trigger.setJobDataMap(jobDataMap);
这是执行作业的代码:
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
logger.debug("map = " + dataMap.entrySet());
logger.debug("dataMap = " + context.getJobDetail().getJobDataMap());
for (Object val : dataMap.entrySet()) {
logger.debug("next data map val = " + val);
}
EmailReportService emailReportService = (EmailReportService) dataMap.get("service");
logger.debug("email report service = " + emailReportService);
在日志中,emailReportService返回为空。
最佳答案
您将JobDataMap
保存在触发器中,并且正在从jobDetail
获取。尝试使用JobExecutionContext.html#getMergedJobDataMap()或从JobExecutionContext.html#getTrigger()获取JobDataMap