【发布时间】:2019-06-09 10:08:22
【问题描述】:
我在汽车租赁领域有一个 Spring Boot RESTful CRUD 服务。
从总体上看,它是一个简单的 CRUD 应用程序,带有 SQL 数据库以及 Car、Client、Lease 等所有实体。
现在我必须介绍一个报告生成功能,该功能旨在处理租赁数据并根据 SQL db 中的数据计算一些统计数据并将报告持久化到 MongoDB。
我已经通过创建一个依赖于OriginDataService 和MongoService 的ReportGenerationService 来实现它。
ReportGenerationService 根据OriginDataService 返回的数据生成报告。反过来,OriginDataService 有一个方法getData(),它对 DAO 层进行多次调用,因此使用@Transactional(isolation = Isolation.REPEATABLE_READ) 进行注释。我希望返回的数据是一致的。 ReportGenerationService获取数据后,通过调用MongoService的persist(Report)方法生成报表并持久化。
在我的实现中我get data -> generate report -> persist report。
但是如果基础数据和报告无法放入 RAM 怎么办? 解决方法是一点一点的选择,生成部分报表,持久化部分报表,处理完所有行数据后合并报表。
这意味着一个方法应该读取数据,处理它并持久化。
我还希望我的方法以可重复读取隔离级别读取数据,然后我必须用@Transactional(isolation = Isolation.REPEATABLE_READ) 注释该方法。但由于该方法中使用了 2 个 db,@Transactional 将传播到它们两者上,我只希望 SQL 使用它。
如何逐步读写不同的数据库?
【问题讨论】:
标签: java transactions spring-transactions