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

标签 java spring heroku jetty threadpool

我有一个在 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-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,您可以通过在 <configuration> 下添加此配置来告诉它使用您的自定义 Jetty 配置。在pom.xml :

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

关于java - 如何在 Heroku 上使用 jetty-runner 增加 Jetty 线程池大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083780/

相关文章:

java - 如何在 jqplot 中自定义图表工具提示?

java - 如何在禁用 MongoDB 但仍安装的情况下运行 Spring?

java - 检测 JSP 中的下拉列表变化?

java - 如何获取Spring库来搭建Spring环境?

spring - 如何使用 spring security 2.0 在我的 JSP 页面中显示错误消息

java - Spring bean 不使用@Component 注释 Autowiring

node.js - Heroku Postgres 无法在 Windows 上拉动和推送

java - 使用 SQLiteQueryBuilder 生成 UPDATE 查询

ruby-on-rails - Heroku 上的 Rails 应用程序 - 状态 500 错误 => 空白白页

django - CSS 未显示在 heroku django 应用程序上