> 文档中心 > 解决定时任务无法注入的问题,配置类

解决定时任务无法注入的问题,配置类


在定时任务执行的时候,当时间点到了,执行job的时候,有时候需要用到某些bean,但是自动注入是不行的,所以只能想其他办法,

新建class加入该配置类方可解决

package com.jszb.rzzl.task;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;/** * 配置类,解决定时任务无法注入的问题 */@Componentpublic class AppContextUtil implements ApplicationContextAware {    private static ApplicationContext applicationContext;    public static ApplicationContext getApplicationContext() { return applicationContext;    }    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { AppContextUtil.applicationContext = applicationContext;    }    public static Object getBean(String beanName) { return applicationContext.getBean(beanName);    }}

然后在执行task方法调用该AppContextUtil


@Component@Slf4jpublic class CreditRemindTask implements Runnable {public void run() {log.info("开始执行任务 CreditRemindTask start..." + LocalDateTime.now().toLocalTime());IRegCreditManageService regCreditManageService = (IRegCreditManageService) AppContextUtil.getBean("myServiceReg");try {regCreditManageService.creditRemind();} catch (Exception e) {System.err.println(e);log.error("执行任务 CreditRemindTask 异常:{}", e.getLocalizedMessage());}log.info("结束执行任务 CreditRemindTask end..." + LocalDateTime.now().toLocalTime());}}

任务统一配置执行

@Configuration@EnableScheduling@Slf4jpublic class TaskManager implements SchedulingConfigurer {    @Autowired    private ISystemConfigService systemConfigService;    /**     * 设置Trigger     *     * @param cron     * @return     */    private Trigger getTrigger() { return new Trigger() {     @Override     public Date nextExecutionTime(TriggerContext triggerContext) {  SystemConfig config = systemConfigService.getConfig(Const.TASK_SCHEDULE_TIME);  if (config != null && StringUtils.isNotEmpty(config.getConfigValue())) {      String cron = config.getConfigValue();      log.info("获取到表达式 cron is {}", cron);      CronTrigger trigger = new CronTrigger(cron);      Date nextExec = trigger.nextExecutionTime(triggerContext);      return nextExec;  }  return null;     } };    }    @Override    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask(new CreditRemindTask(), getTrigger());//授信到期提醒 taskRegistrar.addTriggerTask(new RepayRemindTask(), getTrigger());//提前7个工作日还款提醒 taskRegistrar.addTriggerTask(new AutoRepayTask(), getTrigger());//自动还款 taskRegistrar.addTriggerTask(new RegAssTimerTask(), getTrigger());//资金与资产取消匹配    }}
public class Const {/** * 日终批处理执行时间表达式 */public static final String TASK_SCHEDULE_TIME = "task.schedule.time";}