zoukankan      html  css  js  c++  java
  • 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("信息批量记录", "推荐商户信息为空");
          }
        }
      }
  • 相关阅读:
    iOS 时区问题总结 NSTimeZone
    项目中图片问题
    支付宝支付相关问题汇总
    算法时间计算:logA(N)与O(n)
    UE4 AR开发笔记
    UE4 PostProcessVolume笔记
    cpp typename关键字
    UE4 二维相关
    ATOM基础教程一使用前端插件emmet(16)
    监听浏览器返回上一页
  • 原文地址:https://www.cnblogs.com/alan319/p/8549159.html
Copyright © 2011-2022 走看看