我可以在另一个专用线程池上运行批处理作业吗?

时间:2017-04-13 22:35:31

标签: java wildfly java-ee-7 jsr352

是否可以在另一个专用线程上运行批处理作业(JSR-352批处理)?

在我的应用程序中,我有几个任务,我想在另一个专用线程池上执行。此外,我还要在默认的一半线程上执行任务(在Wildfly standalone.xml文件中配置默认​​线程池)。

不幸的是,到目前为止,我只能为整个机制设置一个新的线程池:

    <subsystem xmlns="urn:jboss:domain:batch-jberet:1.0">
        <default-job-repository name="in-memory"/>
        <default-thread-pool name="batch | special"/>
        <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>
        <thread-pool name="special"> //new pool
            <max-threads count="5"/>
            <keepalive-time time="30" unit="seconds"/>
        </thread-pool>
    </subsystem>

所以在我的情况下,我可以互换使用批次特殊线程池,但不能用于不同的工作。

总之,我想设置每个作业的线程池

2 个答案:

答案 0 :(得分:1)

我不认为您可以为每个作业指定批处理线程池。但是,您可以使用应用程序归档中的jboss-all.xml为每个部署指定一个自定义线程池。请参阅WildFly Batch Subsystem Configuration Docs

答案 1 :(得分:0)

不,不可能为每个作业定义线程池。但是您可以定义应用程序将使用哪个批处理默认线程池。

  1. 定义一个额外的线程池:

    false

  2. 使用

    创建webapp / WEB-INF / jboss-all.xml

    <subsystem xmlns="urn:jboss:domain:batch-jberet:1.0"> ... <thread-pool name="testpool"> <max-threads count="10"/> <keepalive-time time="30" unit="seconds"/> </thread-pool> </subsystem>