上下文ac获取为null,SpringContextUtil配置位置,以及各配置xml的加载顺序有讲究...

发现一个有趣的现象,一般job都会在执行前去初始化一次ac,而任务监视器SupervisorQueueJob不会,因此启动时初始化ac为null,SupervisorQueueJob会始终无法获取上下文,也即其所需的bean。使得队列任务得不到执行。

import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;

@SuppressWarnings("serial")
@Service("supervisorQueueJob")
public class SupervisorQueueJob extends AbstractJob {
    
  
    @Value("${quartz.job.autoStartup}")
    protected String                 jobStart;
    
    
    protected ThreadPoolTaskExecutor jobThreadPoolTaskExecutor;
    
    @Override
    protected void doExecute(JobExecutionContext context) {
    
       
        
    }
    
    @Override
    protected void afterExecute(JobExecutionContext context) {
    
       
    }
    
    @Override
    protected void beforeExecute(JobExecutionContext context) {
    
       
    }
    
    
    @Scheduled(cron = "*/10 * * * * ?")
    public void triggerSupervisorTask() {
    
        if (Boolean.parseBoolean(jobStart)) {
            LOGGER.info("监控线程执行一次" + System.currentTimeMillis());
            jobThreadPoolTaskExecutor = (ThreadPoolTaskExecutor) ac.getBean("jobThreadPoolTaskExecutor");
            jobThreadPoolTaskExecutor.submit((QueueSupervisorTask) SpringContextUtil.getBean("queueSupervisorTask"));
        }
    }
}

原因:

<bean class="com.wind.buy.os.manager.utils.SpringContextUtil" />加载不能在SupervisorQueueJob 初始化之后(这个不言而喻)。

还有若是需要在Controller中手动触发定时任务,则对Controller包的扫描必须也在SupervisorQueueJob 之后,一般放在dispatch-servlet.xml中。

加载顺序可以在配置文件web.xml中指定。

 

转载于:https://www.cnblogs.com/qcxdoit/p/9072502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值