Quartz定时器+Spring + @Autowired注入 空指针异常

 

 

在Quartz的定时方法里引用@Autowired注入Bean,会报空指针错误

 

解决办法:使用Spring原生获取Bean的方法 取代 @Autowired注入

 示例类

注解方式写了一个定时方法,方法里需要引用Dao层,插入数据库,

直接@Autowired会报空指针异常,做出如下红色字体改动

public class FTPUtil{

//    @Autowired
//    MicroCameraPassRecordDao microCameraPassRecordDao;

    private static MicroCameraPassRecordDao microCameraPassRecordDao = null;
    
    使用Spring获取注入bean
    public FTPUtil() {
        microCameraPassRecordDao = 
                (MicroCameraPassRecordDao) SpringContextUtils.getApplicationContext().getBean("microCameraPassRecordDao");
    }



    /**
    * 定时从FTP下载图片到本地,在这个方法里调用别的Dao层的方法
    */
    @Scheduled(cron="0/20 * * * * * ?")
    @Lazy(false)
    public synchronized void service() {
        FTPUtil ftpUtil = new FTPUtil();
        boolean isConnect = ftpUtil.connectServer();
        //从FTP下载到工程file下
        boolean flag = ftpUtil.download(getFtpPath());
        
        //引用注入Bean,插入数据库
        MicroCameraPassRecord cameraRecord = new MicroCameraPassRecord();
        cameraRecord.setCameraId(deviceID);
        cameraRecord.setAddTime(System.currentTimeMillis());
        microCameraPassRecordDao.insert(cameraRecord);
        
    }
    
}

 getBean(引用类名,开头字母小写)

 SpringContextUtils

Spring获取Bean的工具类:


package com.zit.util;

import java.util.Map;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;


@SuppressWarnings({ "rawtypes", "unchecked" })
@Service("springContextUtils")
public class SpringContextUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;
     
    public void setApplicationContext(ApplicationContext arg0)
            throws BeansException {
        applicationContext = arg0;
    }
 
    /**
     * 获取applicationContext对象
     * @return
     */
    public static ApplicationContext getApplicationContext(){
        return applicationContext;
    }
     
    /**
     * 根据bean的id来查找对象
     * @param id
     * @return
     */
    public static Object getBeanById(String id){
        return applicationContext.getBean(id);
    }
     
    /**
     * 根据bean的class来查找对象
     * @param c
     * @return
     */
    public static Object getBeanByClass(Class c){
        return applicationContext.getBean(c);
    }
     
    /**
     * 根据bean的class来查找所有的对象(包括子类)
     * @param c
     * @return
     */
    public static Map getBeansByClass(Class c){
        return applicationContext.getBeansOfType(c);
    }

}

猜你喜欢

转载自www.cnblogs.com/Donnnnnn/p/9664314.html