1.如果数据源来自多个数据库,我们就要配置多个事务管理器了,每个数据源配置一个。我们在服务上配置使用的事务的时候,就要配置指定的事务管理器了。
2.我们可以用分布式事务管理,但是我建议不用做分布式事务管理,尽量保证一个事务下只操作一个数据库, 保持服务的功能单一性,如果一个服务会操作到两个数据库中的数据,那涉及到的所有表最好放到同一个数据库中。因为分布式事务管理,消耗资源严重,性能下降。
3.如果要用分布式事务管理的话,就一定要做到事物的一致性。
4.事务管理的列子如下:
列一:好比我们有两个服务1和2,分别操作一个数据库,如果1 中 又调用2服务,这时候实际上 1服务 是操作了多个数据源的,如果要保证事务一致性,就需要 判断 2服务的返回结果,如果b服务中,出错了会抛异常,那我们就try catch 2 服务,并且 重新在1 中 把这个异常抛出。如果b服务中,始终返回结果,并且结果的状态是错误的,我们就不能 trycatch了,而是判断返回结果的状态,如果是错误的就在a1中抛出异常。这就是我们常见的事务管理。
列二:一个方法内:在1数据库里的a表插入一条记录,在2数据库里的b表插入一条记录,要么都插入成功,要么都插入失败,只要有一方失败,就回滚事务.那么我们就要定义两个DAO分别使用不同的数据源,DAOA连接1数据库,DAOB连接2数据库,然后定义一个Service类,加上Spring注解@Transactional,表示进行事务管理。事务要配置成jta分布式事务。将DAOA和DAOB注入到Service类里面。在service类里面创建一个方法,方法里调用DAOA的方法插入数据到1数据库的a表,然后调用DAOB的方法插入数据到2数据库的b表 ,这也是一个例子。