我發現下面的螺紋: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