多库数据源深入分析(Mybatis+ Spring + JTA)(一)
?
最近搭建架构,碰到JTA和事务Transaction的问题,在此做个总结:
?
架构:Mybatis+ Spring
?
技术:spring的AbstractRoutingDataSource和JTA
?
老规矩,先贴代码,在讲原理,刚开始的时候不使用JTA,代码如下:
?
?
?因为每个Service目前只可能访问一个DataSource,所以在调用Service的时候,调用DataSourceContextHolder.setDataSourceType(key)(key可以为ds1,ds2),
就可以动态切换数据源了(当然最好用AOP思想,技术上spring + AspectJ,在每个Service需要的方法切上一刀),
而且对于spring的@Transactional事务管理是起作用的
?
?
OK,按照这种模式,如果Service可能访问多个库,就将DataSourceTransactionManager换成JtaTransactionManager
?
?
?当然,Datasource换成JNDI获取
?
?
?在spring的@Transactional事务管理中,那是死活无法切换数据源
?
由于内容有点多,这个技术总结分为两部分。
?
?
?