2

我有一个在 Heroku 上运行的 Java (Spring MVC) webapp。它使用本文中描述的设置: Heroku 上的 Spring MVC Hibernate 入门

看起来 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>
4

1 回答 1

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-1or scheduler-pool-3

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

(在我意识到我的问题不是Jetty 问题之前,我已经研究了 Jetty 线程池的配置方式。在此处记录;也许它对某人有用。)

创建一个jetty.xml配置文件(在某个地方,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>
于 2013-04-18T15:19:53.900 回答