我发现下面的螺纹:How exactly JdbcTemplate with TransactionManager works together?Spring事务管理器是否将连接绑定到线程?
的该第一句:
据我理解的DataSourceTransactionManager结合从指定的数据源,以当前线程的JDBC连接,从而允许一个线程绑定每个数据源的连接。如果它是一个连接池,它将采用其中一个可用连接。
......正是我想知道的。
当使用事务管理器时,你最终会得到每个线程拥有自己的单一连接吗?此外,该连接还有多久?同一个线程在单个请求中是否使用相同的连接,还是有其他事情发生?我只是想了解当你有一个事务管理器的时候Spring究竟在做什么,当你不知道(不管你是否真的有事务)。
谢谢你的回应。它有助于我更好地理解正在发生的事情。我了解事务管理如何允许事务扩展到多个操作。但是,就我而言,我在每个DAO方法上都有@Transactional(propagation = Propagation.SUPPORTS),这意味着每个调用都将使用它自己的独立事务。在管理器从池中获得初始连接之后,它会将该连接绑定到当前线程,然后从那里为线程的生命检索它,而不是返回到池以获取连接? – dnc253 2012-02-14 16:27:38
“每次电话会使用它自己的独立交易” - 这是不正确的。您的DAO将“继承”已经绑定到线程的任何现有事务。除非没有绑定,否则它不会启动一个新的。 – skaffman 2012-02-14 16:33:09
我想我定义“交易”的方式并不完全正确。我理解一个事务的方式是当你有一个单独的数据库操作(可以有任何数量的更新,插入等)。这一切发生或没有发生。 DAO的设置方式,每个方法都会独立于其他方法在DB上运行。如果一个方法失败,它不会影响其他方法在失败之前或之后执行的操作。那么,到底什么是“交易”呢?我认为每种方法都会创建它自己的新交易,但显然情况并非如此? – dnc253 2012-02-14 20:10:35