在action里面开一个线程,然后在这个线程中创建线程池,往线程池里添加N个线程,这些线程是有链接数据库的操作的,在运行的时候,凡是spring注入的变量都是空,报空指针错误,求助怎么解决这个问题。

解决方案 »

  1.   

    其他的注入都是正常的,只有线程里面的注入有问题,这个spring可以配置吗?
      

  2.   

       
    @Override
        public String execute() throws Exception {
            saveOnSelfModels();        StartThread sendRun = new StartThread();
            sendRun.setOnShelfMap(onShelfMap);
            sendRun.start();        return SUCCESS;
        }    
    这个是action里面启动线程的的一步:private ExecutorService executorService;
    public StartThread(){
            initExecuteService();
        }
    public void initExecuteService(){
            executorService = Executors.newFixedThreadPool(Constants.THREAD_POOL_SIZE);
        }
    @Override
        public void run() {
            //first send
            List<SendEmergencyThread> sendList = new ArrayList<SendEmergencyThread>();
            Set<OnShelf> key = onShelfMap.keySet();
            for(OnShelf onShelf : key){
                OnShelfBat onShelfBat = onShelfMap.get(onShelf);
                SendEmergencyThread newSendThread = new SendEmergencyThread(onShelf, onShelfBat, false);
                executorService.execute(newSendThread);
                sendList.add(newSendThread);
            }
            shutDown();
            //thread wait
            try{
                boolean loop = true;
                do{
                    loop = !executorService.awaitTermination(2, TimeUnit.SECONDS);
                }while (loop);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    这是初始化线程池的线程,然后SendEmergencyThread 是也是一个线程类,在SendEmergencyThread里面会有操作数据库的步骤,但是在这里spring就不能注入了,会报空指针错误。
      

  3.   

    期待中,我也遇上同样的问题,spring的taskExecutor启用线程池,可是操作数据库总是获取不到session