1. 程式人生 > >Spring_宣告式事務

Spring_宣告式事務


1.匯入jar包
  • IOC容器必須的jar包
    commons-logging-1.1.3.jarspring-beans-4.0.0.RELEASE.jarspring-context-4.0.0.RELEASE.jarspring-core-4.0.0.RELEASE.jarspring-expression-4.0.0.RELEASE.jar
  • 使用註解的方式配置bean時需要匯入的jar包
    spring-aop-4.0.0.RELEASE.jar
  • 連線資料庫時需匯入的jar包
    c3p0-0.9.1.2.jar    mysql-connector-java-5.1.37-bin.jar
  • AOP需要匯入的jar包
com..0.jarcom.8.RELEASE.jarspring-aspects-4.0.0.RELEASE.jar
  • 使用JdbcTemplate時需要匯入的jar包
    spring-jdbc-4.0.0.RELEASE.jarspring-orm-4.0.0.RELEASE.jarspring-tx-4.0.0.RELEASE.jar2.使用Spring的宣告式事務
  • 1)配置事務管理器
<!-- 配置事務管理器 --><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
><!-- 設定資料來源 --><propertyname="dataSource"ref="dataSource"></property></bean>
  • 2)啟用使用註解的事務支援
<!-- 啟用事務的註解支援 --><!-- 如果事務管理器的id屬性值是transactionManager,transaction-manager屬性就可以省略 --><tx:annotation-driven/>
  • 3)在要新增事務的方法上新增@Transactional註解
    • 關於@Transactional註解
      • 可以新增到方法上
      • 也可以新增到類上
        • 類中所有的方法添加了事務
   @Transactional@Overridepublicvoidpurchase(intuserId, Stringisbn) {//1.獲取圖書的價格doublebookPrice=bookShopDao.getBookPriceByIsbn(isbn);//2.更新圖書的庫存bookShopDao.updateBookStock(isbn);//3.更新使用者賬戶的餘額bookShopDao.updateUserAccount(userId,bookPrice);    }[email protected]中的一些屬性
  •  事務的傳播行為
    • 一個方法執行在一個開啟了事務的方法中時,該方法是使用原來的事務還是開啟一個新的事務
  • 事務的隔離級別
    • Mysql預設的隔離級別:可重複讀
    • Oracle預設的隔離級別:讀已提交(通常我們就設定該值)
  • 設定那些異常回滾或者不回滾
  • 設定事務超時的時間
  • 設定只讀屬性
/**     * propagation屬性:用來設定事務的傳播行為     *       -Propagation.REQUIRED:預設,使用呼叫者的事務     *       -Propagation.REQUIRES_NEW:開啟一個新事務     *     * isolation屬性:用來設定事務的隔離級別     *       -Isolation.REPEATABLE_READ:可重複讀,Mysql預設的隔離級別     *       -Isolation.READ_COMMITTED:讀已提交,Oracle預設的隔離級別,也是常有的隔離級別     *     * rollbackFor屬性:用來設定出現什麼異常時才回滾,值是一個數組,裡面放的是異常的型別     * rollbackForClassName屬性:用來設定出現什麼異常時才回滾,值是一個數組,裡面放的是異常的名字     * noRollbackFor屬性:用來設定出現什麼異常不回滾,值是一個數組,裡面放的是異常的型別     * norollbackForClassName屬性:用來設定出現什麼異常時不回滾,值是一個數組,裡面放的是異常的名字     *     * timeout屬性:用來設定超時的時間,單位是秒     *     * readOnly屬性:用來設定當前操作是一個只讀的操作,通常對資料庫進行查詢操作時設定該屬性為true     */@Transactional(propagation=Propagation.REQUIRES_NEW, isolation=Isolation.READ_COMMITTED,             noRollbackFor={ArithmeticException.class},timeout=3,readOnly=false)@Overridepublicvoidpurchase(intuserId, Stringisbn) {//1.獲取圖書的價格doublebookPrice=bookShopDao.getBookPriceByIsbn(isbn);//2.更新圖書的庫存bookShopDao.updateBookStock(isbn);//3.更新使用者賬戶的餘額bookShopDao.updateUserAccount(userId,bookPrice);    }4.通過XML的形式配置事務<?xml version="1.0"encoding="UTF-8"?><!-- 引入外部的屬性檔案 --><context:property-placeholderlocation="classpath:db.properties"/><!-- 配置資料來源 --><beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="user"value="${jdbc.user}"></property><propertyname="password"value="${jdbc.password}"></property><propertyname="jdbcUrl"value="${jdbc.url}"></property><propertyname="driverClass"value="${jdbc.driverClass}"></property><propertyname="minPoolSize"value="${jdbc.minPoolSize}"></property><propertyname="maxPoolSize"value="${jdbc.maxPoolSize}"></property></bean><!-- 配置 JdbcTemplate --><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="dataSource"></property></bean><!-- 配置BookShopDaoImpl --><beanid="bookShopDao"class="it.test.spring.transaction.xml.dao.BookShopDaoImpl"><propertyname="jdbcTemplate"ref="jdbcTemplate"></property></bean><!-- 配置BookServiceImpl --><beanid="bookShopService"class="it.test.spring.transaction.xml.service.BookShopServiceImpl"><propertyname="bookShopDao"ref="bookShopDao"></property></bean><!-- 配置事務管理器 --><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"></property></bean><!-- 配置事務 --><tx:adviceid="txAdvice"><!-- 配置新增事務的方法 --><tx:attributes><tx:methodname="purchase"propagation="REQUIRED"/><!-- 給查詢的方法新增事務 --><tx:methodname="get*"read-only="true"/><!-- 給所有的方法新增事務 --><tx:methodname="*"/></tx:attributes></tx:advice><!-- 配置中AOP --><aop:config><!-- 配置切入點表示式 --><aop:pointcutexpression="execution(* it.test.spring.transaction.xml.service.BookShopServiceImpl.purchase(..))"id="pointCut"/><!-- 將新增的方法與切入點表示式關聯 起來 --><aop:advisoradvice-ref="txAdvice"pointcut-ref="pointCut"/></aop:config></beans>

相關推薦

Spring_宣告事務

1.匯入jar包IOC容器必須的jar包    commons-logging-1.1.3.jarspring-beans-4.0.0.RELEASE.jarspring-context-4.0.0.R

spring_(23)Spring_事務準備和宣告事務md

事務簡介 事務管理是企業級應用程式開發中必不可少的技術,用來確保資料的完整性和一致性。 事務就是一系列的動作,它們被當做一個單獨的工作單元。這些動作要麼全部完成,要麼全部不起作用。 事務的四個關鍵屬性(ACID) 原子性(atomicity):事務

延遲載入、快取、spring與宣告事務

什麼是延遲載入 延遲載入又稱(懶載入) resultMap中的 association 和 collection 標籤就具有延遲載入的功能(一對一,一對多的關係自帶延遲載入,在開發裡面最常用的) - 作用是:什麼時候用什麼時候載入 設定延遲載入 <!

宣告事務管理三:基於註解的配置

這種基於註解配置的宣告式事務管理方法式很簡單,很方便              (1) 像之前一樣恢復到初始狀態 (2) 配置事務管理器(注入連線池)       (3) 開啟註解

宣告事務管理二:基於AspectJ的xml配置

下面講述的是宣告式事務管理的第二種方法,是基於AspectJ的xml配置的       (1) 引入AspectJ的java包(一種簡化的操作)並copy到web-INF       (2) 配置事務管理器   &n

宣告事務管理一:TransactionProxyFactoryBean

     下面是宣告式事務管理的第一種方法使用原始的TransactionProxyFactoryBean,這種方法以後用的比較少,因為當事務管理比較複雜之後,相應的配置也會變得很複雜           

Spring Boot(四)開啟宣告事務

簡介 以前用Spring想要用事務的時候,都需要自己在spring的配置檔案中配置事務管理器。而Spring Boot則預設對jpa,jdbc,mybatis開啟了事務,引入他們的依賴的時候,事務就開啟了。使用事務只需要一個@Transactional註解就可以了。 準備 以上一篇文章【

Spring 程式設計事務 宣告事務

程式設計式事務通用類: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.datasource.DataSourceTransactionManager

第十二講:12,spring宣告事務管理-註解

1,複製專案spring404 ,改名spring404-3。修改BankServiceImpl類,添加註解,package com.cruise.service.impl;import org.springframework.transaction.annotation.Tra

第十一講:11.spring宣告事務管理-xml方式

1,複製專案spring404 ,改名spring404-2,修改BankServiceImpl類,刪除宣告式事務的程式碼。宣告式事務管理的方式缺點是,事務程式碼嚴重嵌入邏輯程式碼中 package com.cruise.service.impl; import org.springframewor

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宣告事務管理方式( 基於tx和aop名字空間的xml配置[email&#

轉自:https://www.cnblogs.com/niceyoo/p/8732891.html 1. 宣告式事務管理分類 宣告式事務管理也有兩種常用的方式, 一種是基於tx和aop名字空間的xml配置檔案,另一種就是基於@Transactional註解。 顯然基於註解的方式更簡單

淺談spring事務管理的2種方式:程式設計事務管理和宣告事務管理;以及@Transactional(rollbackFor=Exception.class)註解用法

事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過

事務宣告宣告事務和程式設計事務介紹

事務宣告宣告式事務和程式設計式事務介紹 轉載出處 https://blog.csdn.net/u013083576/article/details/51754567 程式設計式事務:所謂程式設計式事務指的是通過編碼方式實現事務,即類似於JDBC程式設計實現事務管理。管理使用Transacti

使用註解實現Spring的宣告事務管理

使用註解實現Spring的宣告式事務管理,更加簡單! 步驟:          1) 必須引入Aop相關的jar檔案          2) b

Spring宣告事務(待更新)

四大特性:ACID 原子性:一個事務必須視為一個不可分割的最小工作單元,一個事務要麼全部完成,要麼全部失敗回滾,不可能只執行其中的一部分操作 一致性:事務執行的結果必須使資料庫從一個一致性狀態轉換到另一個一致性狀態,事務必須使資料庫始終保持一致性狀態 隔離性isolat

spring事物配置,宣告事務管理和基於@Transactional註解的使用

spring支援程式設計式事務管理和宣告式事務管理兩種方式。         程式設計式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於程式設計式事務管理,spring推薦使用Transactio

9.spring:事務管理(下):宣告事務管理

宣告式事務管理  sprin的宣告式事務是管理AOP技術實現的事務管理,其本質是是對方法前後進行攔截,然後 在目標方法開始之前建立或者加入一個事務,在執行完成目標方法之後根據執行情況提交或者回滾事務。   宣告式事務管理優點:不需要通過程式設計的方式管理事務,因而不需要在業務邏輯程

第四篇:Spring Boot開啟宣告事務

Spring支援宣告式事務,即使用註解來選擇需要使用事務的方法,它使用@Transactional註解在方法上表明該方法需要事務支援。當然,Spring Boot開啟事務也只需要一個註解@Transactional 就可以了。 準備階段 在pom檔案中引入mybatis啟動依賴: