事务的问题

来源: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回答

风间影月

2021-04-26

这个就是涉及到分布式事务了,普通事务是不支持的。很复杂,在这里的话了解一下吧,这个话题要完全讲的话估计得10来个小时哈哈。一般企业也都是抛开的,能避免就避免。因为分布式事务很容易出现资损。
有兴趣可以去看看基于 mq的分布式事务,比较通用。还有微服务的seata,都可以去了解一下,哈哈哈

1
1
慕斯卡2532047
非常感谢!
2021-04-27
共1条回复

Spring Cloud 进阶 Alibaba 微服务体系自媒体实战

一课收获分布式系统开发,微服务核心技术和中间件企业生产落地

1113 学习 · 896 问题

查看课程