业务背景: 有一份数据,需要双写到两份存储( Mysql、Neo4j )
项目基于 springboot.我已经配置了 mysql 数据源的事务管理器,neo4j 没有配置。在不使用分布式事务的前提下,以下这种做法能否保证两份数据的一致性:
@Transactional public void doService() { // 第一步,插 mysql insertMysql(); // 第二步,插 neo4j insertNeo4j(); } 思路:
- 如果插 mysql 出现异常,此时 mysql 事务直接回滚,neo4j 还没来得及插入。所以最终表现是:两个引擎数据都没写入,保持一致。
- 如果插入 neo4j 出现异常,此时 mysql 事务也会回滚。而 neo4j 由于插入失败,也没有数据。所以最终表现是:两个引擎数据都没写入,保持一致。
看起来,这样简单的做法能保证一致性,老哥们能指出这种做法有啥坑吗?( PS:假设 mysql、neo4j 都是一条操作语句)
