jdbc事务管理只能限于单个数据源,不能跨多个数据源。事务是默认自动提交的,即一条sql提交一次。这里以两个数据源为例:
事务管理 | DAO | 数据源 |
transactionManager | dao1 | ds1 |
| dao2 | ds2 |
即事务管理作用在ds1上,在ds2不起作用。以下代码说明了事务提交的情况:
以下为事务管理分别作用在ds1和ds2上:
事务管理 | DAO | 数据源 |
transactionManager1 | dao1 | ds1 |
transactionManager2 | dao2 | ds2 |
jta事务管理可以跨多个数据源,但connect和访问的资源需要支持XA,比如mysql5.0之后可支持XA。这里也以两个数据源为例:
事务管理 | DAO | 数据源 |
jtaTransactionManager | dao1 | ds1 |
dao2 | ds2 |
即jta事务管理同时作用在ds1和ds2上。以下代码说明了事务提交的情况: