springboot xml宣告式事務管理方案
在開發過程中springboot提供的常見的事務解決方案是使用註解方式實現。
使用註解
在啟動類上添加註解
@EnableTransactionManagement
在需要事務控制的方法新增@Transactional註解
這種方式問題是,我們需要在方法上添加註解,這樣處理起來特別麻煩。
我們可以使用XML方式配置,配置好後,方法不需要加註解,這樣我們使用起來就不需要再管註解的事情。
1.新增transaction.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="query*" propagation="SUPPORTS" read-only="true"></tx:method> <tx:method name="get*" propagation="SUPPORTS" read-only="true"></tx:method> <tx:method name="select*" propagation="SUPPORTS" read-only="true"></tx:method> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception"></tx:method> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution (* com.neo.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" order="0"/> </aop:config> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
這樣我們只需只要在編寫事務程式碼的時候遵循上面的規則,編寫方法名稱,就可以對事務進行攔截。
2.在啟動類上引入此配置檔案。
@SpringBootApplication
@ImportResource("classpath:transaction.xml")
@MapperScan({"com.neo.dao"})
public class DemoApplication {
這樣springboot 就可以支援事務管理了。
3.測試事務是否生效
public void create(SaleOrder order){ orderDao.create(order); throw new RuntimeException("出錯了") ; }
編寫程式碼如下,在新增後丟擲異常,發現數據並沒有真正的插入。
注意事項:
使用事務需要引入:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
列印事務日誌:
logging:
level:
com.neo.dao: debug
org.springframework.jdbc: debug
日誌執行情況:
2018-10-16 23:17:17.702 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Creating new transaction with name [com.neo.service.SaleOrderService.create]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
2018-10-16 23:17:17.708 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Acquired Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817] for JDBC transaction
2018-10-16 23:17:17.713 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Switching JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817] to manual commit
2018-10-16 23:17:17.754 DEBUG 9640 --- [nio-8000-exec-1] com.neo.dao.SaleOrderDao.create : ==> Preparing: INSERT INTO SALE_ORDER (ID_,NAME_,TOTAL_,CREATOR_,CREATE_TIME_) VALUES (?, ?, ?, ?, ?)
2018-10-16 23:17:17.782 DEBUG 9640 --- [nio-8000-exec-1] com.neo.dao.SaleOrderDao.create : ==> Parameters: 1539703037695(String), zyg(String), 33.0(Double), AA(String), null
2018-10-16 23:17:17.784 DEBUG 9640 --- [nio-8000-exec-1] com.neo.dao.SaleOrderDao.create : <== Updates: 1
2018-10-16 23:17:17.785 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Initiating transaction rollback
2018-10-16 23:17:17.785 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Rolling back JDBC transaction on Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817]
2018-10-16 23:17:17.786 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Releasing JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817] after transaction
2018-10-16 23:17:17.787 DEBUG 9640 --- [nio-8000-exec-1] o.s.jdbc.datasource.DataSourceUtils : Returning JDBC Connection to DataSource
2018-10-16 23:17:17.797 ERROR 9640 --- [nio-8000-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/demo] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: 出錯了] with root cause
也可以單獨增加springboot的配置類,來使xml配置在springboot專案的生效
相關推薦
springboot xml宣告式事務管理方案
開發十年,就只剩下這套架構體系了! >>>
宣告式事務管理二:基於AspectJ的xml配置
下面講述的是宣告式事務管理的第二種方法,是基於AspectJ的xml配置的 (1) 引入AspectJ的java包(一種簡化的操作)並copy到web-INF (2) 配置事務管理器 &n
第十一講:11.spring宣告式事務管理-xml方式
1,複製專案spring404 ,改名spring404-2,修改BankServiceImpl類,刪除宣告式事務的程式碼。宣告式事務管理的方式缺點是,事務程式碼嚴重嵌入邏輯程式碼中 package com.cruise.service.impl; import org.springframewor
spring宣告式事務管理方式( 基於tx和aop名字空間的xml配置[email
轉自:https://www.cnblogs.com/niceyoo/p/8732891.html 1. 宣告式事務管理分類 宣告式事務管理也有兩種常用的方式, 一種是基於tx和aop名字空間的xml配置檔案,另一種就是基於@Transactional註解。 顯然基於註解的方式更簡單
spring事務管理之三:宣告式事務管理:使用xml配置檔案的方式
這種方式是開發中常見的一種方式:利用aop的思想,將需要事務管理的業務方法通過xml配置的方式,將事務管理加在該類的相關方法上。這種方法的優點是,一次xml配置,後期不用關心業務類增加或者減少,通過xml中配置的匹配資訊,會去找業務類所在的包和方法,然後加上事務。 重點是配置<tx:a
Spring宣告式事務管理、事務的傳播行為xml配置
1. <tx:method name="insert*" propagation="REQUIRED" />中name的值是ServiceImpl中各個要加入事物管理的方法的方法名。 <!-- 事務管理: Spring宣告式事務管理 。
宣告式事務管理方式:基於AspectJ的XML方式和基於註解的方式
基於AspectJ的XML方式 <!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataS
xml方式實現spring的宣告式事務管理及對jdbc操作的支援
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
spring事物管理之宣告式事務管理的xml配置
spring宣告式事務管理:xml配置如下 <!-- ================== 事務管理 ================== --> <bean name="transactionManager" class="or
Spring不同事務管理方式與宣告式事務管理區域性回滾處理方案
Spring配置檔案中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。 DataSource、TransactionManager這兩部分只是會根據資料訪問
宣告式事務管理三:基於註解的配置
這種基於註解配置的宣告式事務管理方法式很簡單,很方便 (1) 像之前一樣恢復到初始狀態 (2) 配置事務管理器(注入連線池) (3) 開啟註解
宣告式事務管理一:TransactionProxyFactoryBean
下面是宣告式事務管理的第一種方法使用原始的TransactionProxyFactoryBean,這種方法以後用的比較少,因為當事務管理比較複雜之後,相應的配置也會變得很複雜
第十二講:12,spring宣告式事務管理-註解式
1,複製專案spring404 ,改名spring404-3。修改BankServiceImpl類,添加註解,package com.cruise.service.impl;import org.springframework.transaction.annotation.Tra
springboot(三) springboot開啟宣告式事務
版權宣告:本文為博主原創文章,歡迎轉載,轉載請註明作者、原文超連結 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70833629 轉載請標明出處: http://blog.csdn.n
Java程式設計師從笨鳥到菜鳥之(八十)細談Spring(九)spring+hibernate宣告式事務管理詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
淺談spring事務管理的2種方式:程式設計式事務管理和宣告式事務管理;以及@Transactional(rollbackFor=Exception.class)註解用法
事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過
使用註解實現Spring的宣告式事務管理
使用註解實現Spring的宣告式事務管理,更加簡單! 步驟: 1) 必須引入Aop相關的jar檔案 2) b
spring事物配置,宣告式事務管理和基於@Transactional註解的使用
spring支援程式設計式事務管理和宣告式事務管理兩種方式。 程式設計式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於程式設計式事務管理,spring推薦使用Transactio
9.spring:事務管理(下):宣告式事務管理
宣告式事務管理 sprin的宣告式事務是管理AOP技術實現的事務管理,其本質是是對方法前後進行攔截,然後 在目標方法開始之前建立或者加入一個事務,在執行完成目標方法之後根據執行情況提交或者回滾事務。 宣告式事務管理優點:不需要通過程式設計的方式管理事務,因而不需要在業務邏輯程
springboot開啟宣告式事務
springboot開啟宣告式事務 轉載http://blog.csdn.net/forezp/article/details/70833629 springboot開啟事務很簡單,只需要一個註解@Transactional 就可以了。因為在springboot中已經預設對jp