zoukankan      html  css  js  c++  java
  • SpringMVC中定时器继承Task后无法对service注入问题

    最近在做一个Spring+MyBatis的一个项目,其中用到了Redis的存储,然后遇到问题是这样的:

    RedisTask是通过定时器来每分钟像数据库里推送的,于是就有了

    public class RedisTask  extends Task {
    
        public void execute(TaskExecutionContext executor) throws RuntimeException {
        ……
        ……
        }
     }

         然后在定时器的任务中通过对Redis的调用,推送到本地数据库

    OrderService orderService = new OrderService();
    Order order = new Order();
    int num = orderService.add(order);
    System.out.println("插入条数为:" + num);

    那么问题来了,tomcat开始没次调用定时器的RedisTask就开始报错,debug发现orderService为null,也就是说service根本就没有注入。

    然后我就在Spring的配置文件里查看标注问题,发现根本没问题,再然后发现此方法继承了Task,于是乎恍然大悟

    :定时器继承了Task之后,在定时器调用此方法后会直接执行execute方法,来不急执行标注进行注入。

     @Resource
        private OrderService orderService;

     然后解决方案:

    1、引入ApplicationContextUtil的工具类

    package com.aneop.common.util;
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
     
    public class ApplicationContextUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
     
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
     
        public void setApplicationContext(ApplicationContext applicationContext) {
            ApplicationContextUtil.applicationContext = applicationContext;
        }
     
        public static Object getBean(String beanName) {
            return applicationContext.getBean(beanName);
        }
    }

     2、在execute方法中以这种方式进行对service进行注入

    OrderService orderService = (OrderService)ApplicationContextUtil.getBean("orderService");

    注:在service的接口的@Service标注中必须写明注入的名字。 

    @Service("orderService")
    public class OrderServiceImpl implements OrderService {
  • 相关阅读:
    RDD容错处理方式和传统容错处理方式的比较(视频笔记)
    安装spark笔记
    动手实战创建RDD的三种方式(视频笔记)
    spark实时运算
    spark RDD 中Action的count、top、reduce、fold、aggregate (视频笔记)
    RDD中transformation的combineByKey、reduceByKey详解(视频笔记)
    spark RDD 中 transformation的map、flatMap、mapPartitions、glom详解(视频笔记)
    spark RDD中transformation的lazy特性深度解析和手动证明(视频笔记)
    SQL模糊查询语句拼接时单引号'问题
    我の第一篇博客
  • 原文地址:https://www.cnblogs.com/yhtboke/p/6163274.html
Copyright © 2011-2022 走看看