如何在Heroku上使用jetty-runner增加Jetty线程池大小?

时间:2013-04-18 13:04:40

标签: java spring heroku jetty threadpool

我在Heroku上运行了一个Java(Spring MVC)webapp。它使用本文中描述的设置: Getting Started with Spring MVC Hibernate on Heroku

默认情况下,Jetty只使用一个线程。鉴于此Heroku& jetty-runner设置,增加线程池大小的最简单方法是什么

注意:我没有任何与Jetty相关的自定义代码(因此我不清楚我将如何应用这些建议,例如:How to use setThreadPool() in Jetty)。如果可能的话,我宁愿保持这种方式。与Jetty相关的所有东西现在都在Procfile和pom.xml中(见下文)。

我可以使用一些jetty-runner参数或配置选项设置线程池大小吗?如果我需要创建Jetty配置文件,我如何让Heroku / jetty-runner使用它?

Procfile:

web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --port $PORT target/*.war

的pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.7</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-runner</artifactId>
                        <version>8.1.10.v20130312</version>
                        <destFileName>jetty-runner.jar</destFileName>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

1 个答案:

答案 0 :(得分:7)

为我解决了什么(Spring,而不是Jetty问题)

我在问题中写这篇文章时错了:

  

默认情况下,Jetty只使用一个线程。

结果证明这纯粹是一个Spring问题。在applicationContext.xml中,我更改了

<task:annotation-driven/>

<task:annotation-driven scheduler="scheduler-pool"/>
<task:scheduler id="scheduler-pool" pool-size="5"/>

...现在,不同的@Scheduled任务可以在scheduler-pool-1scheduler-pool-3等单独的线程中运行。

如何调整Jetty线程池配置(使用jetty-runner)

(在我意识到我的问题是而不是 Jetty问题之前,我已经研究过如何配置Jetty线程池。在这里记录;也许这对某人有用。)

创建一个jetty.xml config file(像src/main/resources这样的地方,以便将其复制到编译目标目录),并根据自己的喜好自定义它。

示例(可能很差):

<?xml version="1.0"?>

<!-- For some reason, must use org.eclipse classes, 
 even though we depend on org.mortbay Jetty... -->

<Configure id="Server" class="org.eclipse.jetty.server.Server">

    <Set name="ThreadPool">
        <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
            <Set name="minThreads">3</Set>
            <Set name="maxThreads">5</Set>
        </New>
    </Set>

</Configure>

然后,告诉jetty-runner使用带有--config开关的配置文件。例如,在Heroku的Procfile中,添加--config target/classes/jetty.xml

web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --config target/classes/jetty.xml --port $PORT target/*.war 

如果您也恰好使用 jetty-maven-plugin ,可以告诉它使用您的自定义Jetty配置,在<configuration> pom.xml下添加此配置:< / p>

<jettyConfig>target/classes/jetty.xml</jettyConfig>