Spring事务管理器是否绑定了与线程的连接?

时间:2012-02-13 20:51:10

标签: spring spring-transactions transactionmanager

我找到了以下帖子:How exactly JdbcTemplate with TransactionManager works together?

第一句话:

  

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

......正是我想知道的。

使用事务管理器时,最终每个线程都有自己的单一连接吗?此外,该连接存在多长时间?同一个线程是否在单个请求中使用相同的连接,或者还有其他事情在进行?我只是想了解一下当你有一个事务管理器时Spring正在做什么,而当你没有事务管理器时(无论你是否真的有事务)。

1 个答案:

答案 0 :(得分:12)

  

使用事务管理器时,最终每个线程都有自己的单一连接吗?此外,该连接存在多长时间?

连接通常从连接池获得。当事务管理器启动事务时,从池中借用连接,然后在事务完成时返回池。在此期间,连接绑定到线程。

  

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

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

  

无论您是否确实有交易

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