第 22 章 配置批处理应用程序
JBoss EAP 7 引入了对 JSR-352 中定义的 Java 批处理应用的支持。批处理应用的 Jakarta 等效于 Jakarta Batch。您可以配置环境以运行批处理应用,并且利用 batch-jberet
子系统管理批处理作业。
如需关于开发批处理应用的信息,请参阅 JBoss EAP 开发指南中的 Jakarta Batch 应用开发。
22.1. 配置批处理作业
您可以使用 batch-jberet
子系统配置批处理作业的设置,该子系统基于 JBeret 实施。
默认的 batch-jberet
子系统配置定义内存中作业存储库和默认线程池设置。
<subsystem xmlns="urn:jboss:domain:batch-jberet:2.0"> <default-job-repository name="in-memory"/> <default-thread-pool name="batch"/> <job-repository name="in-memory"> <in-memory/> </job-repository> <thread-pool name="batch"> <max-threads count="10"/> <keepalive-time time="30" unit="seconds"/> </thread-pool> </subsystem>
默认情况下,服务器恢复后将重新启动服务器暂停期间停止的任何批处理作业。您可以将 restart-jobs-on-resume
属性 设置为 false
,以将作业保留为 STOPPED
状态。
/subsystem=batch-jberet:write-attribute(name=restart-jobs-on-resume,value=false)
22.1.1. 配置批处理作业存储库
本节介绍如何使用管理 CLI 配置内存中和 JDBC 作业存储库来存储批处理作业信息。您还可以通过使用管理控制台配置作业存储库,方法是导航到 Configuration
添加内存中作业存储库
您可以添加将批处理作业信息存储在内存中的作业存储库。
/subsystem=batch-jberet/in-memory-job-repository=REPOSITORY_NAME:add
添加 JDBC 作业存储库
您可以添加将批处理作业信息存储在数据库中的作业存储库。您必须指定用于连接数据库的数据源的名称。
/subsystem=batch-jberet/jdbc-job-repository=REPOSITORY_NAME:add(data-source=DATASOURCE)
设置默认作业存储库
您可以将内存中或 JDBC 作业存储库设置为批处理应用的默认作业存储库。
/subsystem=batch-jberet:write-attribute(name=default-job-repository,value=REPOSITORY_NAME)
这将需要重新加载服务器。
reload
22.1.2. 配置批处理线程池
本节介绍如何使用管理 CLI 配置线程池和线程工厂,以用于批处理作业。您还可以使用管理控制台配置线程池和线程工厂,方法是导航到 Configuration
配置线程池
在添加线程池时,您必须指定 max-threads
,其应始终大于 3
,因为保留了两个线程,以确保分区作业可以按预期执行。
添加线程池。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
如果需要,设置
keepalive-time
值。/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
使用线程事实
添加线程工厂。
/subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
为线程工厂配置所需的属性。
-
Group-name
- 为此线程工厂创建的线程组的名称。 -
优先级
- 创建的线程的线程优先级。 thread-name-pattern
- 用于为线程创建名称的模板。可以使用以下模式:-
%%
- 百分比符号 -
%t
- 每个事实线程序列号 -
%g
- 全局线程序列号 -
%
F - 工厂序列号 -
%I
- 线程 ID
-
-
将线程工厂分配到线程池。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=thread-factory,value=THREAD_FACTORY_NAME)
这将需要重新加载服务器。
reload
设置默认线程池
您可以将不同的线程池设置为默认线程池。
/subsystem=batch-jberet:write-attribute(name=default-thread-pool,value=THREAD_POOL_NAME)
这将需要重新加载服务器。
reload
查看线程池统计信息
您可以使用 read-resource
管理 CLI 操作查看批处理线程池的运行时信息。您必须使用 include-runtime=true
参数来查看此运行时信息。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:read-resource(include-runtime=true) { "outcome" => "success", "result" => { "active-count" => 0, "completed-task-count" => 0L, "current-thread-count" => 0, "keepalive-time" => undefined, "largest-thread-count" => 0, "max-threads" => 15, "name" => "THREAD_POOL_NAME", "queue-size" => 0, "rejected-count" => 0, "task-count" => 0L, "thread-factory" => "THREAD_FACTORY_NAME" } }
您还可以从 Runtime 选项卡导航到 Batch 子系统,从而使用管理控制台查看批处理线程池的运行时信息。