我在事务控制下有两个插件。如果其中一个失败,另一个也不会被执行/插入。这样在MySQL中正确执行时可以正常工作
START TRANSACTION;
INSERT INTO table (field) VALUES (value);
INSERT INTO table2 (field) VALUES (value);
COMMIT;
现在使用骆驼我已经尝试了
<to uri="sql:START TRANSACTION; INSERT INTO table (field) VALUES (value);INSERT INTO table2 (field) VALUES (value);COMMIT;"/>
产生sql语法错误。 我尝试的第二件事是
<to uri="sql:START TRANSACTION"/>
<to uri="sql:INSERT INTO table (field) VALUES (value)"/>
<to uri="sql:INSERT INTO table2 (field) VALUES (value)"/>
<to uri="sql:COMMIT"/>
有效但如果一次插入失败,另一次插入仍然被执行并插入。
我也发现了这个 http://camel.apache.org/transactional-client.html但我正在使用蓝图,这些例子似乎只适用于春天。所以,如果有人用骆驼蓝图做一个很好的例子,那就太好了。
任何人都可以帮我在骆驼中做到这一点吗?
答案 0 :(得分:1)
使用TX管理器怎么样? 定义XA JDBC资源并将其与您的调用一起使用,例如此处https://github.com/tmielke/fuse-demos/blob/master/Camel/Camel-JMS-JDBC-XA-TX/routing/src/main/resources/OSGI-INF/blueprint/camel-context.xml
-G。
答案 1 :(得分:0)
确保&#34;引擎&#34;是InnoDB(不是MyISAM)。 MyISAM默默地忽略事务语句(START
,COMMIT
)。
使用mysql命令行工具,执行SHOW CREATE TABLE ...
。在表的末尾,它将指定引擎。