如何动态地将输入参数值更改为stored-proc-inbound-channel-adapter

时间:2014-03-28 14:46:44

标签: stored-procedures spring-integration spring-jdbc

我需要调用一个在特定窗口中收集数据的存储过程。例如,我发送一个代表现在的时间戳,一个15分钟的窗口,它将在最后15分钟内返回所有数据。每次调用此过程时,我都需要更新现在表示的时间戳,以便我避免使用旧数据。

无论如何要实现这个目标吗?

我尝试使用"现在"下面的bean是失败的,因为即使该bean是原型,它的值只在创建通道适配器时被检索过一次。

我目前配置的匿名存储过程 - 入站 - 通道 - 适配器如下:

<int-jdbc:stored-proc-inbound-channel-adapter
    channel="storedProcOutboundChannel" stored-procedure-name="dataWindowRetrieval"
    data-source="dataSource" auto-startup="true" id=""
    ignore-column-meta-data="false" is-function="false"
    skip-undeclared-results="true" return-value-required="false">

    <int:poller fixed-rate="60" time-unit="SECONDS"></int:poller>
    <int-jdbc:parameter name="CurrentDateTime" type="java.sql.Timestamp" value="#{now}" />
    <int-jdbc:parameter name="MinuteOffset" type="java.lang.Integer" value="3" />
    <int-jdbc:parameter name="SomeOtherParameter" type="java.lang.Integer" value="4" />
    <int-jdbc:parameter name="YetAnotherParameter" type="java.lang.Integer" value="15" />
    <int-jdbc:returning-resultset name="theResults" row-mapper="org.springframework.jdbc.core.ColumnMapRowMapper" />
</int-jdbc:stored-proc-inbound-channel-adapter>

<bean id="now" scope="prototype" class="java.sql.Timestamp">
    <constructor-arg value="#{ T(java.lang.System).currentTimeMillis()}" />
</bean>

1 个答案:

答案 0 :(得分:1)

而不是value使用expression="@now"

该值仅在初始化时评估。