在新线程上执行时,自动装配控制器上的调用方法会挂起

时间:2018-01-02 16:37:24

标签: java spring multithreading spring-boot

下面有一个非常简化的代码示例,但基本上我有一个调度程序在新线程上调用控制器。在那个新的线程MOST autowired bean工作正常,但其中一个,MyController,只是挂起,如果我尝试并出于任何原因调用它。关于MyController与其他自动装配对象的唯一不同之处在于它是' EnhancerbyspringCGLIB'我怀疑是问题所在。我必须通过创建一个新线程来做一些愚蠢的事情或丢失上下文然后它无法解析代理或什么?我迷路了,所以任何指针都会受到赞赏!

注意,如果我直接调用该方法而不是从新线程调用一切正常,但我不能将其作为绕过事件处理的测试代码,我需要确保内存中没有过时的java对象。 / p>

示例代码:

@Primary
@Component
public class Scheduler {
    @Autowired MyController controller;
    void myMethod(){
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(() -> {
            controller.doSomething();
        });
        try {
            executor.awaitTermination(1, TimeUnit.MINUTES);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
@Controller
public class MyController{
    doSomething(){
        //I will never get here
    }
}

0 个答案:

没有答案