我在租车域中有一个Spring Boot RESTful CRUD服务。
从总体上看,它是一个简单的CRUD应用程序,具有SQL数据库和所有诸如Car,Client,Lease等实体。
现在,我必须引入一个报告生成功能,该功能旨在处理租赁数据并基于SQL db中的数据计算一些统计信息,并将报告保存到MongoDB中。
我已经通过创建依赖于ReportGenerationService
和OriginDataService
的{{1}}实现了它。
MongoService
根据ReportGenerationService
返回的数据生成报告。依次,OriginDataService
具有方法OriginDataService
,该方法对DAO层进行了多次调用,并因此用getData()
进行了注释。我希望返回的数据是一致的。在获取数据后,@Transactional(isolation = Isolation.REPEATABLE_READ)
会生成报告并通过调用ReportGenerationService
的{{1}}方法来保留报告。
在我的实现中,我MongoService
。
但是,如果基本数据和报告无法放入RAM中怎么办? 解决方案是一点一点地选择它,生成报告的一部分,保留报告的一部分,然后在处理完所有数据行后合并报告。
这意味着一种方法应读取数据,对其进行处理并保留。
我还希望我的方法以“可重复读取”隔离级别读取数据,然后必须用persist(Report)
对该方法进行注释。但是由于该方法中使用了2个db,所以get data -> generate report -> persist report
会在两个数据库上同时传播,我只希望SQL使用它。
如何逐步读取和写入不同的数据库?
答案 0 :(得分:0)
请参阅下面的链接和代码示例,它可以帮助您解决问题。
Transaction management for multiple database Using Spring & Hibernate
<bean id="transactionManager" class="com.springsource.open.db.ChainedTransactionManager">
<property name="transactionManagers">
<list>
<bean
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="otherDataSource" />
</bean>
</list>
</property>
</bean>