最近在我的项目中,我需要异步执行一些任务。由于我们在 Tomcat 中使用 Spring 运行 webapp,因此 Spring 提供的 ThreadPoolTaskExecutor 是一个解决方案。
然而,架构师提出了一些反对意见,指出在 web 应用程序中生成线程/拥有线程池是可怕的/禁止的/绝对的邪恶。
通过在网上和 StackOverflow 上进行一些搜索,我意识到是的,在Java EE容器中拥有自己的线程池是一种不好的做法。基本原理是,如果您有自己的线程池,则容器不会意识到它并且无法正确管理资源。当您需要对 webapp 进行一些热部署时,这一点尤其重要。
现在,我们的用例是在 Tomcat 中运行的 Spring webapp。首先,我们可以将 Spring 容器视为轻量级 Java EE容器吗?在这种情况下,是 Spring 直接管理线程池生命周期,而不是应用程序本身,不是吗?
其次,热部署论点是否也适用于这种配置?
是的,我知道可以直接在 Tomcat 中声明一个工作池,然后通过 JNDI 将其注入 Spring。但是相比Spring提供的直接ThreadPoolTaskExecutor设施,还是有点麻烦
所以我的最后一个问题是:建筑师的反对意见与我的情况有关吗?
感谢您对此主题的建议和想法。