在尝试写入表时,我需要知道行是否已更新(创建新行或更新现有行)。我会从受影响的行值获得此值。
以前,解决方案是构建类似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"/>
答案 0 :(得分:3)
target
#[payload]
richher表达式用于使用SQL处理的结果丰富当前消息。
这应该允许你定义一个表达式,告诉Mule在哪里存储更新的结果,即更新的行数。
<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']]
设置流量变量,但这取决于您的用例。