11

我找到了以下线程:JdbcTemplate 与 TransactionManager 究竟如何协同工作?

其中的第一句话:

据我了解,DataSourceTransactionManager 将指定 DataSource 的 JDBC 连接绑定到当前线程,允许每个 DataSource 一个线程绑定连接。如果它是一个连接池,它将占用一个可用连接。

...正是我想知道的。

使用事务管理器时,您是否最终每个线程都有自己的单个连接?另外,这种连接能持续多久?同一个线程是否在单个请求中使用相同的连接,还是有其他事情发生?我只是想了解当您拥有事务管理器和没有事务管理器时 Spring 到底在做什么(不管您是否真的有事务)。

4

1 回答 1

15

使用事务管理器时,您是否最终每个线程都有自己的单个连接?另外,这种连接能持续多久?

连接一般是从连接池中获取的。事务管理器启动事务时从池中借用连接,然后在事务完成时返回池中。在此期间,连接被绑定到线程。

同一个线程是否在单个请求中使用同一个连接

它在事务期间使用相同的连接。请求本身无关紧要。

不管你是否真的有交易

无论您是否明确进行,您总是有一笔交易。如果您没有显式配置一个,那么只要执行单个操作,JDBC 驱动程序和数据库就会启动和完成一个。Spring 的事务管理(或任何其他框架的事务管理)允许您跨多个操作延长该事务的生命周期。这样做需要在事务期间独占使用连接。

于 2012-02-14T08:25:16.530 回答