mysql - 如何使用 jpa 处理分布式事务
问题描述
我有一个要求,我需要在两个不同的数据库 MYSQL 和 mongodb 中插入减少的。在故障转移场景的情况下,整个事务应该回滚。请尽早提供帮助。需要实现这个要求。
解决方案
首先,您必须定义两个数据库连接,因此还要定义两个不同的持久性单元
持久性.xml
文件。
之后,只需在每个 DAO 方法中创建 2 个单独的 EntityManager。
尝试以下操作:
persistFoo(Foo f) {
// Create these EntityManagers with a proper connection/persistence unit name
EntityManager emMySQL = //your MySQL db
EntityManager emMongo = //your Mongo db
EntityTransaction txMySQL = emMySQL.getTransaction();
EntityTransaction txMongo = emMongo.getTransaction();
try {
txMySQL.begin();
emMySQL.persist(f);
txMySQL.commit();
txMongo.begin();
emMongo.persist(f);
txMongo.commit();
} catch(Exception e) {
if(txMySQL.isActive()) {
txMySQL.rollback();
}
if(txMongo.isActive()) {
txMongo.rollback();
}
} finally {
emMySQL.close();
emMongo.close();
}
}
推荐阅读
- amazon-web-services - 向网络公开 ECS 服务
- html - Unabe 将数据切换下拉菜单扩展到屏幕的全宽
- postgresql - GORM:将 *Big.Int 插入 NUMERIC 列(postgresql)
- discord.js - 仅在 Discord.js 中清除不到两周的消息
- python - 将数据框列映射到文件
- flutter - 如何在颤动的行之间写 OR
- glsl - GLSL 着色器用于模拟绒泡
- tensorflow - Keras 自定义损失和 y_true 形状
- reactjs - 带有 react-hook-form 的整体形式的 setValue
- python - 如何在不使用显示的情况下将文本转换为语音,而是将文件保存为 mp3?(Python)