Springboot 定时任务,service层无法注入问题详细解决
2024-10-11 23:20:36
开发一个微信小程序后台,建立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");
最新文章
- Android实现圆形图片
- CSS3动画效果结合JS的轮播
- Linux内核源码分析方法
- poj 1986 Distance Queries
- Storm技术结合
- JDK自带方法实现RSA数字签名
- Android 高手进阶,自己定义圆形进度条
- MAVEN项目环境搭建
- Java使用RabbitMQ之消息确认(confirm模板)
- .net的架构模式
- dhttp与IdCookieManager处理登陆过程
- 配置named服务之前的 相关术语意思
- C++结构变量数据对齐问题
- bzoj1607
- List,Set和Map详解及其区别和他们分别适用的场景
- java concurrent之ReentrantLock
- spring-data-jpa 介绍 复杂查询,包括多表关联,分页,排序等
- xshell过期了怎么办,是学生就用学生版吧
- Java多线程 -join用法
- 十二. 网络与数据库编程1.IP地址和InetAddress类