事务的问题
来源:9-11 生产端存储html到gridfs并关联文章表【静态化解耦】

慕斯卡2532047
2021-04-26
老师,您在这节课说了,建议是将 createArticleHTMLToGridFS 和 updateArticleToGridFS 写在同一个事务中,前者是写入mongodb的gridfs,后者是更新mysql数据库。然后我尝试了一下,代码如下:
@Transactional
public void bornHtmlToGridFsAndWriteToMysql(String articleId) throws Exception {
//【先保存文章html到gridfs】
String articleMongoId = createArticleHTMLToGridFS(articleId);
// 存储到对应的文章,进行关联保存【恶意加长articleMongoId】
for (int i = 0; i < 100; i++) {
articleMongoId += UUID.randomUUID().toString();
}
articleService.updateArticleToGridFS(articleId, articleMongoId);
}
【这两个不同类型不同源的数据库使用 @Transactional 注解是不是不起作用?实际我测试gridfs写入成功了,mysql失败,通过错误信息也可以看到是有事务开启的,都是mysql的事务,然后这里涉及到跨数据库的事务,java里面有啥好的办法没有?】
1回答
-
这个就是涉及到分布式事务了,普通事务是不支持的。很复杂,在这里的话了解一下吧,这个话题要完全讲的话估计得10来个小时哈哈。一般企业也都是抛开的,能避免就避免。因为分布式事务很容易出现资损。
有兴趣可以去看看基于 mq的分布式事务,比较通用。还有微服务的seata,都可以去了解一下,哈哈哈112021-04-27
相似问题