開發一個微信小程序後臺,創建websocket 長鏈接,須要後臺開啓定時任務,java
定時任務定時查庫,相應前臺web
可是具體執行過程當中一直在報空指針錯誤,最後定位到service 爲空,沒法調用其相關的方法致使的spring
因而我嘗試不用@Autowired 注入實例,本身new ,可是仍是失敗了,報空指針小程序
這是spring的一個Bug ,須要手動去配置一個類,主動獲取實例,在定時任務中(繼承TimerTask類),@Autowired 是失效的,沒法注入微信小程序
解決方案以下:微信
1.首先添加一個工具類,就是applicationwebsocket
應注意,一樣須要注入添加 @Compent註解app
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的實現類註解添加名字,以便咱們獲取socket
3.咱們在須要的定時任務類中獲取service實例就能夠使用了ide
StopService stopService = (StopService) ApplicationContextUtil.getBean("myService");