我正在使用ApacheCommonsHttpClient 4.3。x和spring3。我正在尝试将connectionpool与其关联的socketconfig实例连接起来。
http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html
http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/config/SocketConfig.html?is-external=true
我的代码如下所示:
<bean id="socketConfig" class="org.apache.http.config.SocketConfig" factory-method="custom" init-method="build">
<property name="soTimeout" value="60000"/>
<property name="soLinger" value="5" />
</bean>
<bean name="poolingHttpConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager" depends-on="socketConfig">
<property name="maxTotal" value="20" />
<property name="defaultMaxPerRoute" value="20" />
<property name="defaultSocketConfig" ref="socketConfig" />
</bean>
然而,这是行不通的。用于在PoolghttpClientConnectionManager上设置DefaultSocketConfig()的实例类型为SocketConfig类型。生成器而不是SocketConfig。
我希望发生的事情如下:
SocketConfig config = SocketConfig.custom()
.setSoTimeout(60000)
.setSoLinger(5)
.build()
因此,我希望socketConfig bean类型应该是socketConfig实例,而不是socketConfig。生成器实例。
根据spring文档,我认为这应该有效。
http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#beans-工厂类静态工厂方法
我做错什么了吗?或者这在Spring是不受支持的?
我能够通过在Spring做下一个配置来实现它:
<bean id="socketConfig" class="org.apache.http.config.SocketConfig" factory-method="custom">
<property name="soTimeout" value="1000" />
<property name="soLinger" value="5" />
</bean>
<bean name="poolingHttpConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager">
<property name="maxTotal" value="20" />
<property name="defaultMaxPerRoute" value="20" />
<property name="defaultSocketConfig">
<bean factory-bean="socketConfig" factory-method="build" />
</property>
</bean>
事实证明,socketconfig构建器实例的设计并不能很好地与spring配合使用。
我必须使用一个Spring beanFactory实现来创建实例。
bean类:
import org.apache.http.config.SocketConfig;
import org.springframework.beans.factory.FactoryBean;
public class SocketConfigFactoryBean implements FactoryBean<SocketConfig> {
int soLinger;
int soTimeout;
public SocketConfig getObject() throws Exception {
return SocketConfig.custom()
.setSoLinger(soLinger)
.setSoTimeout(soTimeout)
.build();
}
public Class<?> getObjectType() {
return SocketConfig.class;
}
public boolean isSingleton() {
return true;
}
public int getSoLinger() {
return soLinger;
}
public void setSoLinger(int soLinger) {
this.soLinger = soLinger;
}
public int getSoTimeout() {
return soTimeout;
}
public void setSoTimeout(int soTimeout) {
this.soTimeout = soTimeout;
}
}
bean定义
<bean name="poolingHttpConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager">
<property name="maxTotal" value="20" />
<property name="defaultMaxPerRoute" value="20" />
<property name="defaultSocketConfig">
<bean class="org.apache.http.config.SocketConfig" factory-method="custom" init-method="build">
<bean class="com.ex.spring.beans.factory.SocketConfigFactoryBean">
<property name="soTimeout" value="60000"/>
<property name="soLinger" value="5" />
</bean>
</property>
</bean>
我有以下代码: 我将添加更多类似的类。与其单独拼出所有这些类,我想学习如何创建一个可以从简单的数据结构创建这些类的工厂。 我该怎么做?我阅读了Metaobject协议文档,但根据文档页面顶部和中间的示例,我不知道如何动态地为我的类指定不同的名称。 我试过: 但最后一行只是抛出了一个错误:
10.2.1 结构体工厂 Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂”方法。为了方便通常会为类型定义一个工厂,按惯例,工厂的名字以 new 或 New 开头。假设定义了如下的 File 结构体类型: type File struct { fd int // 文件描述符 name string // 文
问题内容: 在我遵循的方法: 我可以从HTML调用它,例如: 如您所见,如果我得到回报 这是实用程序,因此我想将其定义为 没有例外 当我尝试这样称呼它时: 没发生什么事。 **我已添加到控制器。 如何从HTML调用工厂方法? (*如果不清楚,欢迎您更改/编辑我的问题) 谢谢, 问题答案: 好吧,您实际上不应该这样做…但是您 可以 做的是将服务对象放在$ scope的一个属性中,然后从那里调用它。
问题内容: 目前,我有一种方法可以根据给定的String充当工厂。例如: 我要做的是避免在类列表增加时出现整个if-else问题。我想我需要有两种方法,一种将Strings注册到类中,另一种基于操作的String返回类。 用Java做到这一点的一种好方法是什么? 问题答案: 在打开字符串之前,您所做的可能是最好的方法。( 编辑2019: 可以打开字符串-使用它。) 您可以创建工厂对象以及从字符串到
错误:org.mockito.exceptions.misusing.missingMethodInvocationException:when()需要一个参数,该参数必须是“mock上的方法调用”。例如:when(mock.getArticles()).thenreturn(articles); 此外,此错误可能会出现,因为:1。您可以存根:finall/private/equals()/has
我使用WebFlux反应式模块、H2内存数据库和R2DBC反应式驱动程序创建了一个JavaSpring Boot服务。 当我运行该服务时,它失败并显示“无法创建连接工厂”错误: 这是一个嵌套的异常,似乎从存储库开始,然后通过服务传播回控制器。 在仔细阅读了生成的堆栈跟踪并没有发现任何问题的迹象后,我能找到的唯一线索是,我的类中的“连接工厂”输入参数(请参见下文)正在用红色曲线突出显示(“无法自动装