【问题标题】:timeout dynamic HTTP outbound gateway request-factory超时动态 HTTP 出站网关请求工厂
【发布时间】:2015-08-03 17:58:24
【问题描述】:

我已经为 HTTP 出站网关配置了超时,使用 request-factory 属性提供对 ClientHttpRequestFactory bean 的引用:

<int-http:outbound-gateway request-channel="channelGetByCustomer"
    request-factory="requestFactoryGetByCustomer"
    reply-channel="jsonToObjectChannel" url="${getbycustomer.endpoint.url}"
    http-method="GET" expected-response-type="com.mbracero.integration.dto.Item[]">

    <int-http:uri-variable name="customerid" expression="payload.customerid"/>

</int-http:outbound-gateway>

<beans:bean id="requestFactoryGetByCustomer" class="org.springframework.http.client.SimpleClientHttpRequestFactory">
    <beans:property name="connectTimeout" value="${getbycustomer.timeout}"/>
    <beans:property name="readTimeout" value="${getbycustomer.timeout}"/>
</beans:bean>

但我想从 DDBB(或以编程方式)动态加载这些属性,而不是从 Spring 初始启动。

我该怎么做?

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    您可以通过任何注入 requestFactoryGetByCustomer bean 并使用其设置器的服务以编程方式执行此操作:

    @Autowired
    private SimpleClientHttpRequestFactory requestFactoryGetByCustomer;
    
    ....
    
    this.requestFactoryGetByCustomer.setConnectTimeout(30_000);
    

    要从数据库中读取这些选项并使用 Spring Container 功能(例如,在当前情况下的 Property Placeholder)将它们填充到 bean 定义中,您应该查看 Commons Configuration 框架并从数据库SELECT.

    【讨论】:

    • 但是如何将其设置为出站网关?目前我的网关是 XML,我是否将其更改为 Java?
    • 不,没关系。您设置属性的服务和&lt;int-http:outbound-gateway&gt; 将共享同一个对象,并且对第一个对象的更改将影响最后一个对象。您的 XML 配置保持原样。
    • @Gateway 与问题完全无关。请不要混淆顾虑。您询问了connectTimeoutSimpleClientHttpRequestFactory 我已经回答了。我不明白@Gateway 可能有何关联:该选项是 HTTP 请求工厂的一部分,而不是您的消息传递过程。
    • 是的,我认为它可以通过网关设置,并且像往常一样,是不可能的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多