org.hibernate.hibernate.connection.release_mode
org.hibernate.connection包的主要封裝了通過JDBC來連接數(shù)據(jù)庫的操作,用戶可以以數(shù)據(jù)源的方式,或者通過特定數(shù)據(jù)庫驅(qū)動的方式,甚至是自己定義連接類的方式來完成數(shù)據(jù)庫的連接操作,包下面的代碼文件并不多,只有5個,分別是ConnectionProviderFactory.Java,ConnectionProvider.java,DriverManagerConnectionProvider.java,DatasourceConnectionProvider.java,UserSuppliedConnectionProvider.java,其中ConnectionProvider是一個接口,DriverManagerConnectionProvider、DatasourceConnectionProvider、UserSuppliedConnectionProvider分別繼承了這個接口,而ConnectionProviderFactory則是一個工廠類,他的主要作用是調(diào)用ConnectionProvider接口,而不關(guān)心接口的具體實(shí)現(xiàn)是DriverManagerConnectionProvider或者DatasourceConnectionProvider還是UserSuppliedConnectionProvider。
??? 首先來看ConnectionProvider接口,提供了如下幾個方法: ???
1.configure()方法主要是根據(jù)配置文件來初始化所有的連接信息。 ???
2.getConnection()方法抓取一個連接。 ???
3.closeConnection(Connection conn)方法關(guān)閉某個特定連接。 ???
4.close()關(guān)閉所有連接。 ???
5.supportsAggressiveRelease()方法和hibernate.connection.release_mode配置參數(shù)有關(guān),該參數(shù)用來指定使用哪一種連接釋放模式。HIBERNATE參考手冊是這樣描的: ??? Hibernate關(guān)于JDBC連接管理的舊(2.x)行為是,Session在第一次需要的時候獲取一個連接,在session關(guān)閉之前一直會持有這個連接。Hibernate引入了連接釋放的概念,來告訴session如何處理它的JDBC連接。注意,下面的討論只適用于采用配置ConnectionProvider來提供連接的情況,用戶自己提供的連接與這里的討論無關(guān)。通過org.hibernate.hibernate.connection.release_mode的不同枚舉值來使用不用的釋放模式: ????
???? ON_CLOSE - 基本上就是上面提到的老式行為。Hibernate session在第一次需要進(jìn)行JDBC操作的時候獲取連接,然后持有它,直到session關(guān)閉。
???? AFTER_TRANSACTION - 在org.hibernate.Transaction結(jié)束后釋放連接。
???? AFTER_STATEMENT (也被稱做積極釋放) - 在每一條語句被執(zhí)行后就釋放連接。但假若語句留下了與session相關(guān)的資源,那就不會被釋放。目前唯一的這種情形就是使用org.hibernate.ScrollableResults ?
???? auto(默認(rèn)) - 這一選擇把釋放模式委派給org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()方法。對JTATransactionFactory來說,它會返回hibernate.connection.release_mode.AFTER_STATEMENT;對JDBCTransactionFactory來說,則是hibernate.connection.release_mode.AFTER_TRANSACTION。很少需要修改這一默認(rèn)行為,因?yàn)榧偃粼O(shè)置不當(dāng),就會帶來bug,或者給用戶代碼帶來誤導(dǎo)。
???? on_close - 使用 hibernate.connection.release_mode.ON_CLOSE. 這種方式是為了向下兼容的,但是已經(jīng)完全不被鼓勵使用了。
???? after_transaction - 使用hibernate.connection.release_mode.AFTER_TRANSACTION。這一設(shè)置不應(yīng)該在JTA環(huán)境下使用。也要注意,使用hibernate.connection.release_mode.AFTER_TRANSACTION的時候,假若session 處于auto-commit狀態(tài),連接會像AFTER_STATEMENT那樣被釋放。
???? after_statement - 使用hibernate.connection.release_mode.AFTER_STATEMENT。除此之外,會查詢配置的ConnectionProvider,是否它支持這一設(shè)置((supportsAggressiveRelease()))。假若不支持,釋放模式會被設(shè)置為hibernate.connection.release_mode.AFTER_TRANSACTION。只有在你每次調(diào)用ConnectionProvider.getConnection()獲取底層JDBC連接的時候,都可以確信獲得同一個連接的時候,這一設(shè)置才是安全的;或者在auto-commit環(huán)境中,你可以不管是否每次都獲得同一個連接的時候,這才是安全的。也就是說supportsAggressiveRelease()返回false的時候,釋放模式會被設(shè)置為hibernate.connection.release_mode.AFTER_TRANSACTION。如果返回true,只表示它支持使用hibernate.connection.release_mode.AFTER_STATEMENT這一個設(shè)置,并不表示一定使用這個設(shè)置,請注意。
轉(zhuǎn)載于:https://www.cnblogs.com/zhengshiqiang47/p/6832813.html
總結(jié)
以上是生活随笔為你收集整理的org.hibernate.hibernate.connection.release_mode的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《长相思·九月西风兴》第十八句是什么
- 下一篇: 原神钓鱼多久刷新?