Spring宣告式事務管理

2021-07-23 23:27:08 字數 2170 閱讀 3968

使用事務的目的是將整個業務的邏輯處理置於同乙個事務中,方便對整個業務進行管理,如業務的事務回滾;

在編寫**時,為了將乙個業務的核心邏輯處理放入事務中,有時會這樣寫:

session session = sf.opensession();//開啟乙個session

session.gettransaction().begin();//開啟乙個事務

query query = session.createquery("from news");//核心邏輯處理

listallnewlist = query.getresultlist();//核心邏輯處理

session.gettransaction().commit();//提交事務

session.close();//關閉session

如果乙個專案中有很多個業務都要用到事務,那麼每次都需要將開啟session、開啟事務、提交事務、關閉session等步驟執行一遍,如果每次都直接編寫相應的**來執行,肯定不合適,因為這幾個步驟都是固定不變,所以我們可以利用spring的aop,將這幾個步驟放到橫切關注點中,交由spring來幫我們執行,而我們只需要宣告一下,告訴spring,哪些業務需要使用事務

id="transactionmanager"

class="org.springframework.orm.hibernate5.hibernatetransactionmanager">

name="sessionfactory"

ref="sessionfactory"/>

bean>

id="txadvice"

transaction-manager="transactionmanager">

name="add*"

propagation="required"/>

name="del*"

propagation="required"/>

name="get*"

propagation="required"

read-only="true"/>

name="*"

propagation="required"

read-only="true"/>

tx:attributes>

tx:advice>

id="txpointcut"

expression="execution(* news.service.*.*(..))" />

advice-ref="txadvice"

pointcut-ref="txpointcut"/>

aop:config>

2.修改之前的事務處理 ;

session session = sf.opensession();//開啟乙個session

session.gettransaction().begin();//開啟乙個事務

query query = session.createquery("from news");//核心邏輯處理

listallnewlist = query.getresultlist();//核心邏輯處理

session.gettransaction().commit();//提交事務

session.close();//關閉session

改為:

session session = sf.getcurrentsession();//獲取session

query query = session.createquery("from news");//核心邏輯處理

list

allnewlist = query.getresultlist();//核心邏輯處理

opensession()是新建乙個session,在使用宣告式事務管理後,事務都交由spring去處理,不必再寫開啟事務、提交事務的**,同時所有的transaction都使用同乙個session,這個session是spring來管理的的,所以無需再自己open乙個新的session,直接向spring get即可,而且get了spring的session後,無需編寫close(),spring會自動幫我們關閉,而如果不小心用的是自己open的新的session,最後還要自己寫close(),spring不會自動幫我們關閉

Spring宣告式事務管理

spring的宣告式事務管理,可以說是開發人員的福音,也是架構師們的法寶 通過這個神器我們可以有效的解決事務不一致 連線洩露等問題 下面我們就介紹一下spring宣告式事務的配置 1 建立事務管理器 2 制定事務管理 3 建立切面 備註 事務管理機制說明propagation 屬性值 require...

Spring宣告式事務管理

classpath hibernate.cfg.xml public class usermanagerimpl extends hibernatedaosupport implements usermanager public void adduser user user throws excep...

spring 宣告式事務管理

在spring中經常用transactionproxyfactorybean完成宣告式事務管理 使用transactionproxyfactorybean 需要注入它所依賴的事務管理器,設定 的目標物件,物件的生成方式和事務屬性.物件時再目標物件上生成的包含事務和aop切面的新物件,它可以賦給目標的...