您能否在 Java EE 服务器(例如 WebLogic)中运行 Spring Batch,比如说作为 Web 应用程序?Spring Batch 在 Java EE 服务器内创建更多线程(用于多线程步骤和并行步骤)是否有任何问题?框架创建的线程是否违反 Java EE 规范?
我认为这没关系,人们在阅读以下链接后正在这样做
请帮忙。
您能否在 Java EE 服务器(例如 WebLogic)中运行 Spring Batch,比如说作为 Web 应用程序?Spring Batch 在 Java EE 服务器内创建更多线程(用于多线程步骤和并行步骤)是否有任何问题?框架创建的线程是否违反 Java EE 规范?
我认为这没关系,人们在阅读以下链接后正在这样做
请帮忙。
这是一个老问题,但我毕竟会添加一个答案。
是的,可能会有一些问题。我在 WebSphere 服务器上遇到过这样的问题。
根据他们的文档:http ://www-01.ibm.com/support/docview.wss?uid=swg21246676
根据 J2EE 规范,不支持使用诸如“newThread()”之类的 Java™ 调用来生成新线程。这个衍生的线程不继承 J2EE 上下文。建议改为使用异步 bean 或 Commonj WorkManager 线程。这些线程具有适当的 J2EE 上下文并支持间接 JNDI 查找。
Spring批处理使用创建它自己的线程new Thread
,并且这些线程不继承J2EE上下文。
在我的特定情况下,Spring Batch 作业之一通过 https 使用了一些 REST 服务,结果证明 Spring Batch 产生的线程看不到 WebSphere 服务器中安装的 https 证书,从而导致证书错误。
这是一种常见的做法。Spring Batch In Action Chapter 4.4 一书讨论了完全相同的场景,从 Web 容器启动批处理作业。批处理作业应在具有 N 个线程的线程池中运行。池中的线程数应根据性能负载测试的吞吐量结果来确定。
我认为这里没有问题。
Spring Batch(如 Quartz Scheduler)作为 Web 应用程序运行,它不受禁止创建线程的约束,它仅适用于 EJB 组件(不适用于 Servlet)。
因此,只要您不超过服务器容量限制,Spring Batch 可以在任何 EE 应用程序中运行。