1. 程式人生 > >Spring @Transactional事物配置無效原因

Spring @Transactional事物配置無效原因

Spring @transaction不起作用,Spring事物注意事項

1. 在需要事務管理的地方加@Transactional 註解。@Transactional 註解可以被應用於介面定義和介面方法、類定義和類的 public 方法上 。

2. @Transactional 註解只能應用到 public 可見度的方法上 。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 註解,它也不會報錯, 但是這個被註解的方法將不會展示已配置的事務設定。

3. 注意僅僅 @Transactional 註解的出現不足於開啟事務行為,它僅僅 是一種元資料。必須在配置檔案中使用配置元素,才真正開啟了事務行為。

重點事項:

Spring事物是基於類和介面的(通俗理解即:在呼叫的時候不能再同一個類裡面被呼叫,必須呼叫外面的類去做事物操作)

Spring的事物必須是可見的(即:定義的方法必須是public的)

SpringXml配置程式碼:

<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSourceForSqlServer" />
</bean>

核心呼叫java程式碼如下:

package com.pinlive.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.pinlive.JD.util.AccessSignUtil;
import com.pinlive.service.RollbackTestService;
import com.pinlive.transfer.TransferTmSkuService;
import com.pinlive.transfer.TransferVipOrderService;
import com.pinlive.transfer.service.TmallOrderTransferService;

@Controller
public class TestController {


@Autowired
private RollbackTestService rollbackTestService;


@RequestMapping(value = "/test/rollbackTest.do")
public void test(){
for(int i=0; i<10; i++){
rollbackTestService.test();
}
}
}

被呼叫類程式碼:

package com.pinlive.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.pinlive.dao.RollbackTestDao;
import com.pinlive.entity.OrderTest;
 
@Service
public class RollbackTestService {


@Autowired
private RollbackTestDao rollbackTestDao;

/**
* 回滾測試
*/
@Transactional(propagation = Propagation.REQUIRED,rollbackFor={Exception.class, RuntimeException.class})
public void test(){

OrderTest orderTest = new OrderTest();
orderTest.setName("weitao");
orderTest.setStudentId("test");
rollbackTestDao.addTest(orderTest);
System.out.println(orderTest.getId());
rollbackTestDao.addLineTest2(orderTest.getId());
}
}

切記:因為spring事物是基於類和介面的所以只能在類裡面呼叫另一個類裡面的事物,同一個類裡面呼叫自己類的事物方法是無效的。spring事物也不要頻繁使用,在事物處理的同時操作的第一張表會被限制檢視的(即被臨時鎖住)。資料量大的時候會有一定影響。

1111

相關推薦

Spring @Transactional事物配置無效原因

Spring @transaction不起作用,Spring事物注意事項 1. 在需要事務管理的地方加@Transactional 註解。@Transactional 註解可以被應用於介面定義和介

解決Spring AOP 事務 配置 失效原因--業務類裡丟擲的異常不滿足事務攔截器裡定義的異常

採用AOP配置宣告式事務有5種方式,下面只說關於採用TransactionInterceptor事務攔截器的方式,配置程式如下: transactionManager: Xml程式碼  <beanid="dataSource"class="org.apache

spring mvc @Transactional 註解 配置 步驟 及 @Transactional 事物無效 注意事項

spring-context.xml檔案配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xs

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

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

Spring+SpringMVC 配置事務管理無效原因及解決方案。

一般我們在Spring的配置檔案application.xml中對Service層程式碼配置事務管理,可以對Service的方法進行AOP增強或事務處理如事務回滾,但是遇到一個問題,在Controller類中呼叫Service層方法,配置的事務管理會失效,查詢相

Spring Boot 中使用 @Transactional 註解配置事務管理

all arc obj 資料 ror 科學 部分 直接 true 事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支持。Spring 事務管理分為編程式和聲明式的兩種方式。編程式事務指的是通過編碼方式實現事務;聲明式事務基於 AOP,將具體

@Transactional 無效原因

pre 網上 nal 出現 image 沒有 imp 有用 調用 在controller 上面使用 @Transactional 註解時候發現數據沒有回滾,在執行完update 更新語句,事務直接就commit 了, 此時方法尚未執行結束,數據庫數據已經更新了。 第一反

Spring事物配置檔案

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springfram

Spring使用註解@Transactional事物手動回滾

手動回滾:方法1:在service層方法的catch語句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語句,手動回滾,這樣上層就無需去處理異常(現在專案的做法) 方法2:例如

spring boot(二)spring data jpa以及事物配置

本章目的:使用spring data jpa連線mysql,實現增刪改查和事物的配置。 pom.xml引入jar <dependency> <gro

spring Security 重複登入配置無效的問題

關於spring Security重複登入的配置,百度一大堆,我這裡就不囉嗦了。 今天碰到 按照網上的配置,但是 感覺配置無效,同一使用者還是可以登入,不知道為什麼,開始以為是自己配置的又問題。再三確認感覺自己的配置沒有一點問題, 所有查詢原因:檢視原始碼 發現 o

Spring+Mybatim+SpringMVC配置事物oracle資料庫

參考:http://www.cnblogs.com/huzi007/p/3967922.html 參考:http://www.blogjava.net/robbie/archive/2009/04/05/264003.html 完整地配置如下: <?xml ver

Spring事物配置的五種方式

前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。 總結如下:

Spring宣告式事物配置

事物配置:<!-- 攔截器方式配置事物 ,不在列表的方法名稱spring不會管理事物--> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> &

Spring @Transactional註解不回滾不起作用無效

原文地址:http://www.cnblogs.com/wuxiaofeng/p/6819209.html 這幾天在專案裡面發現我使用@Transactional之後,拋了異常居然不回滾。後來終於找到了原因。  如果你也出現了這種情況,可以從下面開始排查。 一、特性

Spring事物管理器配置

Spring自帶事物管理器,只需要配置一下,方法進行規範命名即可第一步:建立一個Spring事物管理器第二步:配置行為propagation="REQUIRED" 指如果當前有事物就在該事物中執行,如果沒有,就開啟一個新的事物(增刪改查中)propagation="SUPPO

Spring Boot 中使用 @Transactional 註解配置事務管理(轉載)

事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支援。Spring 事務管理分為程式設計式和宣告式的兩種方式。程式設計式事務指的是通過編碼方式實現事務;宣告式事務基於 AOP,將具體業務邏輯與事務處理解耦。宣告式事務管理使業務程式碼邏輯不受汙

spring事物配置

 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  <property name="configLocation"

spring boot環境配置

project fda new 信息 fig 比較 fab imp image Eclipse+Maven創建webapp項目<一> 1、開啟eclipse,右鍵new——》other,如下圖找到maven project 2、選

Spring MVC 零配置

只有一個 col 純粹 相同 如果 http 註冊 name 指定 1. pring MVC的核心就是DispatcherServlet類,Spring MVC處理請求的流程如下圖所示: 2. Spring MVC中典型的上下文層次 當我們初始化一個Dispat