Springboot 定时任务,service层无法注入问题详细解决
开发一个微信小程序后台,建立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层无法注入问题详细解决的更多相关文章
- SpringBoot拦截器中无法注入bean的解决方法
SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...
- quartz整合spring框架service层对象注入为null解决方案
Job实现类代码 package cn.itcast.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; imp ...
- 解决service层无法注入
练手时发现个问题,路径404,各种检查发现,多加了一层<context:component-scan base-package="com.yanan.controller"/ ...
- springboot测试service层的单元测试
package com.test.service; import com.task.Application;import com.task.model.po.TaskRecordDo;import o ...
- SpringBoot:Service层使用@Autowired 注解 mapper对象爆红问题
问题点 这个报错可能导致程序运行大面积爆红 这个报错会逼疯强迫症 解决方法 为避免程序运行报错 ,需要在Application.class添加注解@MapperScan(mapper包位置) @Spr ...
- 如何跳出springboot的service层中某一个方法?
有一个需求,就是中断某个方法中的for循环 目前的做法是:for循环中,增加if判断,如果满足条件就return,会中断这个方法 for (int i = 0; i < totalIndex; ...
- springboot 注册dao层 service 层
可以使用三种注解来引入DAO层的接口到spring容器中.1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包中 ...
- springboot Service层单元测试
两个实现类实现同一个Service接口 public interface CustomUrlService { List<ShopMetrics> getShopMetrics(); } ...
- SpringBoot中Service实现类添加@Service却任然无法注入的问题
最近一直在研究Spring Boot.从GitHub上下载了一个my-Blog源码,一边看,一边自己尝试去实现,结果掉在坑了,研究了近一周才爬出来,特地来这博客园记录下来,一是避免自己在放这样的错误, ...
随机推荐
- SpringBoot之Java配置
Java配置也是Spring4.0推荐的配置方式,完全可以取代XML的配置方式,也是SpringBoot推荐的方式. Java配置是通过@Configuation和@Bean来实现的: 1.@Conf ...
- 微信和QQ内置浏览器为什么老是弹停止访问该网页,微信域名被屏蔽的解决办法
近来很多商家开始重视域名防封的技术了,为什么呢,因为实在是封怕了.三天两头就得去换域名,换域名是小事,用户流失就是大事了,直接跟利益挂钩的.那么域名防封技术究竟有多重要呢?又该如何实现域名防封呢?下面 ...
- iOS启动速度优化
背景 7月26号我们阿里数据iOS端发布了4.4.0版本,这次版本主要是优化了性能,其中main()阶段的启动耗时优化成果比较明显,从之前的0.5-0.7秒,降低为目前的0.1-0.2秒(main() ...
- 启动Cognos时报0106错误
1. 问题描述 启动Cognos失败,报错代码为0106. 2. 问题分析 是jdk版本不兼容. 3. 解决方案 方案一:更换jdk1.6,可以使用免安装版,不需要卸载原有的jdk将java_home ...
- java多线程之堵塞的应用
线程在Running的过程中可能会遇到阻塞情况,上次的内容我们已经使用过sleep()的方法. 调用join()和sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到 ...
- 使用有序GUID:提升其在各数据库中作为主键时的性能
原文出处:https://www.codeproject.com/articles/388157/guids-as-fast-primary-keys-under-multiple-database ...
- linux下用户操作
在linux中添加ftp用,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test. 2.建用户:在root用户下: useradd ...
- QT + OpenCV + MinGW 在windows下配置开发环境
由于研究项目需要,最近开始接触C++界面设计,关于“QT + OpenCV + MinGW在windows下配置开发环境”着实让人头疼,单次配置时间相当长,也十分不容易,本人第一次配置成 ...
- Ubuntu16.04 ionic(jdk,sdk,gradle)环境搭建完全攻略
在Ubuntu16.04当中搭建一个ionic环境还是按照官方教程的来,主要问题是首先要把JDK,SDK搭好,环境变量配好.本文中给的包的下载请不要直接用浏览器下载,很慢,尽量用wget 下载,重要的 ...
- 高通sdm845_la2.0源码编译及使用QFIL刷机
一.下载源码 高通芯片代码下载地址:https://chipcode.qti.qualcomm.com/ . *_amss_standard_oem : 高通私有源码(*为sdm845-la--. * ...