我有一个在 Heroku 上运行的 Java (Spring MVC) Web 应用程序。它使用本文中描述的设置: 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 使用它?
过程文件:
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>
最佳答案
什么为我解决了这个问题(Spring,而不是 Jetty 问题)
当我在问题中写下这个时,我错了:
It looks like Jetty by default uses just one thread.
这纯粹是 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-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,您可以通过在 <configuration>
下添加此配置来告诉它使用您的自定义 Jetty 配置。在pom.xml
:
<jettyConfig>target/classes/jetty.xml</jettyConfig>
关于java - 如何在 Heroku 上使用 jetty-runner 增加 Jetty 线程池大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083780/