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("信息批量记录", "推荐商户信息为空");
          }
        }
      }
  • 相关阅读:
    1. C/C++项目一
    3. C/C++笔试面试经典题目三
    1. C/C++笔试面试经典题目一
    Win7下C/C++跨平台开发工具IDE的安装之Eclipse-CDT
    Win7下C/C++跨平台开发工具IDE的安装之CodeBlocks
    css
    form表单,选择器
    html介绍
    元类
    事务、视图、触发器、存储过程、函数、数据库的备份
  • 原文地址:https://www.cnblogs.com/alan319/p/8549159.html
Copyright © 2011-2022 走看看