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上。以下代码说明了事务提交的情况: