第 20 章 配置批处理应用程序
JBoss EAP 7 引入了对 JSR-352 定义的 Java 批处理应用程序的支持。您可以配置环境以运行批处理应用,并使用 batch-jberet
子系统管理批处理作业。
有关开发批处理应用程序的信息,请参阅 JBoss EAP 开发指南中的 Java 批处理应用程序开发。
20.1. 配置批处理作业
您可以使用 batch-jberet
子系统配置批处理作业的设置,该子系统基于 JBeret 实施。
默认的 batch-jberet
子系统配置定义一个内存中作业存储库和默认线程池设置。
<subsystem xmlns="urn:jboss:domain:batch-jberet:1.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)
您还可以配置批处理 作业存储库和线程池 的设置。
20.1.1. 配置批处理作业存储库
本节介绍如何使用管理 CLI 配置内存中和 JDBC 作业存储库,以存储批处理作业信息。您也可以通过从 Configuration 选项卡导航到 Batch 子系统,并从左侧菜单中选择 In Memory 或 JDBC,来使用管理控制台配置作业存储库。
添加内存中作业存储库
您可以添加作业存储库,以在内存中存储批处理作业信息。
/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
20.1.2. 配置批处理线程池
本节介绍如何使用管理 CLI 配置用于批处理作业的线程池和线程工厂。您还可以通过从 Configuration 选项卡导航到 Batch 子系统,并从左侧菜单中选择 Thread Pools 或 Thread Factories,来使用管理控制台配置线程池和线程工厂。
配置线程池
在添加线程池时,您必须指定 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
- 为此线程工厂创建的线程组的名称。 -
priority
- 创建的线程线程优先级。 thread-name-pattern
- 用于为线程创建名称的模板。可以使用以下模式:-
%%
- 百分比符号 -
%T
- per-factory 线程序列号 -
%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 子系统,来使用管理控制台查看批处理线程池的运行时信息。