最近在做一个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 {

SpringMVC中定时器继承Task后无法对service注入问题的更多相关文章

  1. SSM-SpringMVC-09:SpringMVC中以继承MutiActionController类的方式实现处理器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- MutiActionController类,多行动处理器,简单来说,就是可以一个处理器中有多个处理方法,分支 ...

  2. SSM-SpringMVC-08:SpringMVC中以继承AbstractController的方式实现处理器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AbstractController实现了一些特殊功能,如继承了WebContentGenerator缓存控制 ...

  3. SpringMVC中redirect跳转后如何保存Model中的数据?

    @RequestMapping(value = "delete-user", method = RequestMethod.POST) public String deleteUs ...

  4. Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题

    近期在知乎看到一句话,保持学习的有一种是你看到了很多其它的牛人,不甘心,真的不甘心. Spring和hibernate整合的时候,jsp页面做展现,发现展现属性出现: org.apache.jaspe ...

  5. springMVC中不通过注解方式获取指定Service的javabean

    如TestService,其实现为TestServiceImpl,则可以通过 TestService testService = (TestService)SpringContextHolder.ge ...

  6. SpringMVC中使用Cron表达式的定时器

    SpringMVC中使用Cron表达式的定时器 cron(定时策略)简要说明 顺序: 秒 分 时 日 月 星期 年份 (7个参数,空格隔开各个参数,年份非必须参数) 通配符: , 如果分钟位置为* 1 ...

  7. 解决springmvc中文件下载功能中使用javax.servlet.ServletOutputStream out = response.getOutputStream();后运行出异常但结果正确的问题

    问题描述: 在springmvc中实现文件下载功能一般都会使用javax.servlet.ServletOutputStream out = response.getOutputStream();封装 ...

  8. eclipse中的出现在打包一次后,后面新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承ActionBarActivity解决方法一样

    第一次写博客,有什么问题或者想法的希望各位可以进行评论交流,望大家多多包涵! 遇到的问题是在新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承Actio ...

  9. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

随机推荐

  1. Bootstrap<基础二十> 标签

    Bootstrap 标签.标签可用于计数.提示或页面上其他的标记显示.使用 class .label 来显示标签,如下面的实例所示: <!DOCTYPE html> <html> ...

  2. 使用AjaxPro实现无刷新更新数据

    需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM ...

  3. Oracle之内存结构(SGA、PGA)

    一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...

  4. Android 传感器

    今天介绍一下Android的传感器,开发Android传感器的步骤: 1.调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorMan ...

  5. 基于WWF搭建的通用审批流程

    月明星稀,却不见明月:蛾儿雪柳暗香飘过,纵使回首千百回,却不知,心已灭:壮志未酬,却落得个多情应该笑我:扬帆起航,却不知,帆已破.这是我刚离职时的心情,曾几何时,真的想呆在一家公司,做一名优秀的技术管 ...

  6. 浅谈sizeof

    问题:1)sizeof是函数吗:2)sizeof功能:3)具体问题下sizeof值 1)sizeof不是函数,是C语言的一个关键字 2)sizeof作为右值时,求①某个数据类型(sizeof(int) ...

  7. HIS-DELPHI-读取数据库配置

    产品思维: 1.做成可配置的 2.模块化 医生会有自己熟悉的药品,数据里面药品太多,让医生选择不放便 所以可以让医生自己维护自己的药品模板数据 比如医生开了处方后,可以保存当前的处方到某个模板中,那么 ...

  8. Sqlite日期类型问题:该字符串未被识别为有效的 DateTime(String not recognized as a valid datetime)

    使用SQLite抛出异常: 该字符串未被识别为有效的 DateTime 错误(String not recognized as a valid datetime) 解决方法: 也可以在连接字符串 修改 ...

  9. 【python】属性

    在python中,一切皆是对象(object),对象拥有很多属性(arrtribute) 属性分2种 类属性(class attribute):类自身定义or继承 对象属性(object attrib ...

  10. Android — — —动态添加碎片

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...