第 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 作业存储库来存储批处理作业信息。您还可以通过使用管理控制台配置作业存储库,方法是导航到 ConfigurationSubsystemsBatch(JBeret),点 View,然后从左侧菜单中选择 In MemoryJDBC

添加内存中作业存储库

您可以添加将批处理作业信息存储在内存中的作业存储库。

/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 配置线程池和线程工厂,以用于批处理作业。您还可以使用管理控制台配置线程池和线程工厂,方法是导航到 ConfigurationSubsystemsBatch(JBeret),点 View ,然后从左侧菜单中选择 Thread Factory 或 Thread Pool

配置线程池

在添加线程池时,您必须指定 max-threads,其应始终大于 3,因为保留了两个线程,以确保分区作业可以按预期执行。

  1. 添加线程池。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
  2. 如果需要,设置 keepalive-time 值。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
使用线程事实
  1. 添加线程工厂。

    /subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
  2. 为线程工厂配置所需的属性。

    • Group-name - 为此线程工厂创建的线程组的名称。
    • 优先级 - 创建的线程的线程优先级。
    • thread-name-pattern - 用于为线程创建名称的模板。可以使用以下模式:

      • %% - 百分比符号
      • %t - 每个事实线程序列号
      • %g - 全局线程序列号
      • % F - 工厂序列号
      • %I - 线程 ID
  3. 将线程工厂分配到线程池。

    /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 子系统,从而使用管理控制台查看批处理线程池的运行时信息。