Springboot 定時任務,service層沒法注入問題詳細解決

開發一個微信小程序後臺,創建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");
相關文章
相關標籤/搜索