使用Mule 3.5.x +从mysql DB获取受影响的行值

时间:2015-02-18 18:07:10

标签: mysql mule mule-component

在尝试写入表时,我需要知道行是否已更新(创建新行或更新现有行)。我会从受影响的行值获得此值。

以前,解决方案是构建类似org.mule.transport.jdbc.sqlstrategy.SimpleUpdateSqlStatementStrategy的类并重新实现它以返回受影响的行值而不是行本身。

但是,似乎不推荐使用JDBC传输来支持数据库连接器,我发现很难找到代码或如何实现功能。

解决方案:

大卫的回答让我走上正轨!谢谢大卫。

但是,在5.1.27及更高版本的mysql-connector-java中修复了这个问题。

因此,POM需要升级。

  

              MySQL的               MySQL的连接器的Java               5.1.27   

我能够使用DBCP2获得正确的结果如下:

    <spring:beans>
         <spring:bean id= "jdbcDataSource" class ="org.apache.commons.dbcp.BasicDataSource" name= "Bean">
          <spring:property name= "driverClassName" value ="com.mysql.jdbc.Driver" />           
          <spring:property name= "username" value = "root"/>
          <spring:property name= "password" value = "root"/>  
          <spring:property name="url" value="jdbc:mysql://localhost:3306/local1?useAffectedRows=true"/>
            <!-- Following properties added for having auto reconnect  mechanism-->
          <spring:property name= "testOnBorrow" value = "true"/>
          <spring:property name= "validationQuery" value = "select 1"/>
         </spring:bean>
    </spring:beans>   <db:mysql-config name="MySQL_Configuration" dataSource-ref="jdbcDataSource" doc:name="MySQL_Configuration"/>

1 个答案:

答案 0 :(得分:3)

来自documentation

  

target #[payload] richher表达式用于使用SQL处理的结果丰富当前消息。

这应该允许你定义一个表达式,告诉Mule在哪里存储更新的结果,即更新的行数。

来自the integration test suite

<db:update config-ref="dbConfig"
           target="#[header:OUTBOUND:updateCount]">
  <db:parameterized-query>update PLANET set NAME='Mercury' where POSITION=4</db:parameterized-query>
</db:update>

这将设置名为updateCount的出站属性,其中包含已更新的行数。我个人建议改为使用#[flowVars['updateCount']]设置流量变量,但这取决于您的用例。