我在 Spring WS 2.1.0 上有一个 Web 服务。Web 服务在 Tomcat 7 上运行,并使用一种事务方法实现端点,该方法从数据库读取数据并生成不同的报告。Tomcat 7 通过 JServ 协议在 Apache 服务器后面运行。
在通过 Apache JMeter 进行压力测试期间,我得出结论,同时请求是串行处理的。起初我尝试调整数据库连接池(commons-dbcp 和后来的 tomcat-jdbc),但结果是一样的。Endpoint 方法只读取数据,因此没有 read-after-write 或 write-after-read 依赖关系,事务可以并行处理。因此,问题在于 HTTP 连接处理。
经过一番搜索(当然还有谷歌搜索)后,我发现 Spring WS 带有默认的单线程连接管理器(SimpleHttpConnectionManager)。好的做法是将 SimpleHttpConnectionManager 替换为 MultiThreadedHttpConnectionManager。我找到了如下示例代码:
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager>
<property name="maxConnectionsPerHost" value="20"/>
<property name="maxTotalConnections" value="100"/>
</bean>
</constructor-arg>
</bean>
但是这个例子对我来说不是很清楚,因为我不明白 Spring 如何使用 HttpClient (指的是 ID 或自动装配它)。那么在我的情况下,如何将 MultiThreadedHttpConnectionManager 与 Spring 一起使用?我应该在哪里注入这个类的配置实例?