Java(多)線程中注入Spring的Bean

問題說明 :
今天在web應用中用到了Java多線程的技術來併發處理一些業務,但在執行時一直會報NullPointerException的錯誤,問題定位了一下發現是線程中的Spring bean沒有被注入,bean對象的值爲null。

原因分析 :

web容器在啓動應用時,並沒有提前將線程中的bean注入(在線程啓動前,web容易也是無法感知的)

解決方案 :

線程中獲取bean

import org.springframework.context.ApplicationContext;

public class ServiceFactory {

    public static  ApplicationContext context=null;

    public static Object getInstance(String serviceName){

        if (null==context) {
            context=ApplicationContextLoaderListener.getApplicationContext();
        }

        return  context.getBean(serviceName);
    }
}
  @Override
  public void run() {

    // 記錄推薦記錄
    GfRegistrationService gfRegistrationService =
        (GfRegistrationService) ServiceFactory.getInstance("gfRegistrationService");
    List<GfRegistration> insertRegistrationlist = this.getGfRegistrationlist();
    if (insertRegistrationlist.size() > 0) {
      int[] resultArry = gfRegistrationService.batchInsert(insertRegistrationlist);
      if (resultArry.length > 0) {
        logger.info("信息批量記錄", "批量記錄信息,length= " + resultArry.length);
      } else {

        logger.info("信息批量記錄", "推薦商戶信息爲空");
      }
    }
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章