我在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>
答案 0 :(得分:7)
我在问题中写这篇文章时错了:
默认情况下,Jetty只使用一个线程。
结果证明这纯粹是一个Spring问题。在applicationContext.xml中,我更改了
<task:annotation-driven/>
到
<task:annotation-driven scheduler="scheduler-pool"/>
<task:scheduler id="scheduler-pool" pool-size="5"/>
...现在,不同的@Scheduled
任务可以在scheduler-pool-1
或scheduler-pool-3
等单独的线程中运行。
(在我意识到我的问题是而不是 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>