【问题标题】:Bean references in spring integration context configurationSpring集成上下文配置中的Bean引用
【发布时间】:2015-08-22 05:04:42
【问题描述】:

我正在尝试确定当我在 Spring Integration 存储过程出站网关中的存储过程参数中使用我的 bean 引用时无法识别它的原因。我已经能够在两者之间放置一个服务激活器,并以 bean 作为有效负载创建一条新消息,它工作正常。但是为什么我不能使用实际的 bean?

这是一段sn-p代码:

    <bean id="updateDataContentsMapper" class="org.companyname.connector.support.UpdateDataContentsMapper" depends-on="updateDataContents">
            <property name="updateDataContents" ref="updateDataContents"/>
    </bean>
    <bean id="updateDataContents" class="org.companyname.connector.model.UpdateDataContents"/>   


    <int:channel id="update-sp-channel"/>
    <int:channel id="operation-completion-channel"/>
    <int-jdbc:stored-proc-outbound-gateway
                id="01-update-data-contents-sp-gateway"
                request-channel="update-sp-channel"
                reply-channel="operation-completion-channel"
                data-source="dataSource"
                stored-procedure-name="usp_UpdateDataContents" >         
                <int-jdbc:sql-parameter-definition name="@vKeyValue"
                                                   direction="IN"
                                                   type="VARCHAR"
                                                   scale="100"/>
                <int-jdbc:sql-parameter-definition name="@nSeqNum"
                                                   direction="IN"
                                                   type="NUMERIC"
                                                   scale="20"/>  
                <int-jdbc:sql-parameter-definition name="@vMessageLog"
                                                   direction="IN"
                                                   type="VARCHAR"
                                                   scale="100"/>   
                <int-jdbc:sql-parameter-definition name="@vRC"
                                                   direction="OUT"
                                                   type="VARCHAR"
                                                   scale="30"/>                                                          
            <int-jdbc:parameter name="@vKeyValue" value="#{updateDataContents.vKeyValue}"/>   
            <int-jdbc:parameter name="@nSeqNum" value="#{updateDataContents.nSeqNum}"/>
            <int-jdbc:parameter name="@vMessageLog" value="#{updateDataContents.vMessageLog}"/>     
            <int-jdbc:parameter name="@vRC" type="java.lang.String" value="new java.lang.String"/>
            <int-jdbc:returning-resultset name="updateDataContents" row-mapper="org.companyname.connector.support.UpdateDataContentsMapper" />
    </int-jdbc:stored-proc-outbound-gateway>

我发现这很难确定我需要什么。

<int-jdbc:parameter name="@vKeyValue" value="#{updateDataContents.vKeyValue}"/>   

<int-jdbc:parameter name="@vKeyValue" value="#{updateDataContents.getVKeyValue()}"/>   

<int-jdbc:parameter name="@vKeyValue" value="updateDataContents.getVKeyValue()"/>   

我知道如果我使用消息有效负载,这可行:

<int-jdbc:parameter name="@vKeyValue" expression="payload.getVKeyValue()"/>   

如果有人有链接或能给我一些见解,我将不胜感激。我认为我的语法正确。它一定是与实际集成组件有关的东西,或者是我缺少的东西。

谢谢,

戴夫

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    我们需要在这里确定你的目标:如果你只需要使用预定义的值,或者每次存储过程适配器收到消息时计算它。

    value="#{updateDataContents.getVKeyValue()} 是一个 Bean 定义表达式,它只在启动时计算一次。

    &lt;int-jdbc:parameter&gt; 中有一个 expression 替代属性,可以这样指定:

    <int-jdbc:parameter name="@vKeyValue" expression="@updateDataContents.getVKeyValue()"/>   
    

    在这种情况下,将为每个存储过程执行计算 vKeyValue

    【讨论】:

    • 一如既往,谢谢你。这正是我想知道的。
    猜你喜欢
    • 2023-03-17
    • 2011-03-21
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多