第 20 章 配置批应用程序
JBoss EAP 7 引入了 JSR-352 里定义的 Java 批(batch)应用程序。您可以为运行批应用程序配置环境并用 batch-jberet 子系统管理批任务。
关于开发批应用程序的信息,请参考《JBoss EAP 开发指南》里的『Java 批应用程序开发』章节。
20.1. 配置批任务
您可以用基于 JBeret 实现的 batch-jberet 子系统配置批任务。
默认的 batch-jberet 子系统配置定义了一个 in-memory 任务库和默认的线程池设置。
<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 配置 in-memory 和 JDBC 任务仓库来存储批任务信息。您也可以使用管理控制台来配置任务仓库。通过 Configuration 标签页进入 Batch 子系统,从左面的菜单中选 In Memory 或 JDBC。
添加 In-memory 任务仓库
您也可以添加在内存里保存批任务信息的任务仓库。
/subsystem=batch-jberet/in-memory-job-repository=REPOSITORY_NAME:add
添加 JDBC 任务仓库
您也可以添加在数据库里保存任务信息的任务仓库。您必须指定 data-source 来连接数据库。
/subsystem=batch-jberet/jdbc-job-repository=REPOSITORY_NAME:add(data-source=java:jboss/datasources/DATASOURCE)
设置默认的任务仓库
您可以设置 in-memory 或 JDBC 任务仓库为批应用程序的默认任务库。
/subsystem=batch-jberet:write-attribute(name=default-job-repository,value=REPOSITORY_NAME)
这要求服务器重启。
重新载入
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- 工厂线程的序列号 -
%g- 全局线程序列号 -
%f- 工厂序列号 -
%i- 线程 ID
-
-
分配线程工厂至线陈池。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=thread-factory,value=THREAD_FACTORY_NAME)
这要求服务器重启。
重新载入
设置默认的线程池
您可以指定不同的线程池作为默认线程池。
/subsystem=batch-jberet:write-attribute(name=default-thread-pool,value=THREAD_POOL_NAME)
这要求服务器重启。
重新载入
查看线程池统计信息
您可用 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 子系统。
20.2. 管理批任务
部署的 batch-jberet 子系统资源允许您启动、停止和重启批任务。您也可以查看任务执行的细节。
重启批任务
您可以用 Execution ID 和其他属性重启处于 STOPPED 或 FAILED 状态的任务。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:restart-job(execution-id=EXECUTION_ID,properties={PROPERTY=VALUE})Execution ID 必须是任务实例最近执行的 ID。
启动批任务
您可以通过任务 XML 文件启动批任务,并可以指定在启动批任务时需要使用的属性。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:start-job(job-xml-name=JOB_XML_NAME,properties={PROPERTY=VALUE})停止批任务
您可以通过 execution ID 来停止运行的批任务。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:stop-job(execution-id=EXECUTION_ID)
查看批任务的执行细节
您可以查看批任务执行的细节。您必须使用 include-runtime=true 参数来查看这些运行时信息。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)
{
"outcome" => "success",
"result" => {"job" => {"import-file" => {
"instance-count" => 2,
"running-executions" => 0,
"execution" => {
"2" => {
"batch-status" => "COMPLETED",
"create-time" => "2016-04-11T22:03:12.708-0400",
"end-time" => "2016-04-11T22:03:12.718-0400",
"exit-status" => "COMPLETED",
"instance-id" => 58L,
"last-updated-time" => "2016-04-11T22:03:12.719-0400",
"start-time" => "2016-04-11T22:03:12.708-0400"
},
"1" => {
"batch-status" => "FAILED",
"create-time" => "2016-04-11T21:57:17.567-0400",
"end-time" => "2016-04-11T21:57:17.596-0400",
"exit-status" => "Error : org.hibernate.exception.ConstraintViolationException: could not execute statement",
"instance-id" => 15L,
"last-updated-time" => "2016-04-11T21:57:17.597-0400",
"start-time" => "2016-04-11T21:57:17.567-0400"
}
}
}}}
}
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.