开发一个微信小程序后台,建立websocket 长连接,需要后台开启定时任务,

定时任务定时查库,相应前台

但是具体执行过程中一直在报空指针错误,最后定位到service 为空,无法调用其相关的方法导致的

于是我尝试不用@Autowired 注入实例,自己new ,但是还是失败了,报空指针

这是spring的一个Bug ,需要手动去配置一个类,主动获取实例,在定时任务中(继承TimerTask类),@Autowired 是失效的,无法注入

解决方案如下:

1.首先添加一个工具类,就是application

应注意,同样需要注入添加 @Compent注解

package com.cskaoyan.carparking.utils;

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; /**
* @Auther: YangTao
* @Date: 2019/2/21 0021
* 配置类,解决定时任务无法注入的问题
*/
@Component
public class ApplicationContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; public static ApplicationContext getApplicationContext() {
return applicationContext;
} @Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtil.applicationContext = applicationContext; } public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}

2.在我们的servcie的实现类注解添加名字,以便我们获取

3.我们在需要的定时任务类中获取service实例就可以使用了

StopService stopService = (StopService) ApplicationContextUtil.getBean("myService");

  

Springboot 定时任务,service层无法注入问题详细解决的更多相关文章

  1. SpringBoot拦截器中无法注入bean的解决方法

    SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...

  2. quartz整合spring框架service层对象注入为null解决方案

    Job实现类代码 package cn.itcast.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; imp ...

  3. 解决service层无法注入

    练手时发现个问题,路径404,各种检查发现,多加了一层<context:component-scan base-package="com.yanan.controller"/ ...

  4. springboot测试service层的单元测试

    package com.test.service; import com.task.Application;import com.task.model.po.TaskRecordDo;import o ...

  5. SpringBoot:Service层使用@Autowired 注解 mapper对象爆红问题

    问题点 这个报错可能导致程序运行大面积爆红 这个报错会逼疯强迫症 解决方法 为避免程序运行报错 ,需要在Application.class添加注解@MapperScan(mapper包位置) @Spr ...

  6. 如何跳出springboot的service层中某一个方法?

    有一个需求,就是中断某个方法中的for循环 目前的做法是:for循环中,增加if判断,如果满足条件就return,会中断这个方法 for (int i = 0; i < totalIndex; ...

  7. springboot 注册dao层 service 层

    可以使用三种注解来引入DAO层的接口到spring容器中.1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包中 ...

  8. springboot Service层单元测试

    两个实现类实现同一个Service接口 public interface CustomUrlService { List<ShopMetrics> getShopMetrics(); } ...

  9. SpringBoot中Service实现类添加@Service却任然无法注入的问题

    最近一直在研究Spring Boot.从GitHub上下载了一个my-Blog源码,一边看,一边自己尝试去实现,结果掉在坑了,研究了近一周才爬出来,特地来这博客园记录下来,一是避免自己在放这样的错误, ...

随机推荐

  1. BUAAOO-Second-Summary

    #目录 homework & class & trainning : 两次上机.三次作业.四周课堂 code analysis & review : 为什么我没有bug,为什么 ...

  2. PHP安装swoole扩展

    环境:gccyum install gcc 第一步:下载swoole包wget http://pecl.php.net/package/swoole第二步:解压,并进入执行:/usr/local/ph ...

  3. 深深感受 Promise.all 带来的速度提升

    什么是Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.(摘抄自 阮一峰老师的 ECMAScript 6 入门).具体请查看阮一峰老师的这 ...

  4. 使用Dockerfile定制ubuntu+nginx镜像

    实验目的:书写Dockerfile,定制ubuntu 14.04 + nginx 1.14.0的镜像. 实验过程: 1. 下载nginx-1.14.0  http://nginx.org/downlo ...

  5. mysql 压缩版配置

    1.解压之后可以将该文件夹改名,放到合适的位置,个人建议把文件夹改名为MySQL Server 5.6,放到C:\Program Files\MySQL路径中.当然你也可以放到自己想放的任意位置. 2 ...

  6. WPF中定时器与进度条的配合使用

    WPF中定时器使用的注意事项: WPF需要使用System.Windows.Threading.DispatcherTimer定时器,而不能使用System.Timers.Timer定时器.因为Sys ...

  7. 不同浏览器中scrollHeight的比较

    每个浏览器的兼容性不同所以就有了如下判断方案 document.body是DOM中Document对象里的body节点, document.documentElement是文档对象根节点(html)的 ...

  8. div+css的常规使用

    代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...

  9. JSP中客户端跳转与服务器端跳转的区别

    转载自:https://www.cnblogs.com/memewry/archive/2012/08/21/2649988.html 客户端跳转时用HttPservletResopse对象的send ...

  10. 保存cookie状态封装

    from urllib import request, parsefrom urllib.error import HTTPError,URLError#保存cookiefrom http impor ...