spring 分库事物实现

来源:互联网 发布:复旦大学网络认证系统 编辑:程序博客网 时间:2024/05/03 19:30

在spring的事物控制中一般是针对一个库的。我们现在又这样一个情况。为了应对业务的增长,数据量将来的膨胀。我们的数据将这样保存:

1.我们的数据将按照id进行哈希,然后存放到1000张明细表中。

2.由于使用的是mysql,需要考虑到性能,我们还需要记录数据的统计值。这个数据也要通过同一个id的哈希值,分别存放到1000张统计表中。

      *3.保证数据的事物性操作,即统计表的值要和明细表的数值保持一致。

  4.为了降低数据库的压力,我们将1000张明细表和1000张总表,分成8个库(这个数量可以在数据库压力增大时,再次分库)。每个库125*2张表。

 

spring的事物控制管理是由一个事物代理完成的。代理只支持单个库。也就是我们只能注入一个dataSource。

 

   这样是不能支持我们的分库设计的。所以我们将数据库分别生成不同的事物代理,然后通过一个事物管理器控制。


 

当外部进行操作时,我们将针对id的哈希值来定位数据库,通过一个事物管理器,采用相对应的spring事物代理。

 

将按照数据库的事物代理,封装到一个map中。并且注入到一个事物管理器中。

 


下面是分库事物管理器类的实现:

com.du.service.support.DubaiServiceManager

 

当调用时,使用public Object getServiceBean(String objId) 方法获取相应的事物管理器。

 

 

以上是我实现spring分库事物的方法,其实还很不成熟。有些冗余,有些笨重,希望有更好实现方法的牛人留言!谢谢了!


 

 

原创粉丝点击