解决定时任务无法注入的问题,配置类
在定时任务执行的时候,当时间点到了,执行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";}