Spring @Transactional 配置无效 注意事项

原创 2016年08月30日 13:33:13

1. 在需要事务管理的地方加@Transactional 注解。@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上 。

2. @Transactional 注解只能应用到 public 可见度的方法上 。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不会展示已配置的事务设置。

3. 注意仅仅 @Transactional 注解的出现不足于开启事务行为,它仅仅 是一种元数据。必须在配置文件中使用配置元素,才真正开启了事务行为。

4、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

0
版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring @Transactional注解使用注意事项

注意设置rollbackFor属性,很多博客说默认只有RuntimeExcetion会触发回滚,经验证确实如此,所以rollbackFor最好应该设置如下:rollbackFor = {Excepti...
  • K0000000r
  • K0000000r
  • 2016年11月15日 18:29
  • 690

Spring @Transactional事物配置无效原因

Spring @transaction不起作用,Spring事物注意事项 1. 在需要事务管理的地方加@Transactional 注解。@Transactional 注解可以被应用于接口定...
  • weitao233136
  • weitao233136
  • 2016年07月06日 19:10
  • 7158

Spring 下默认事务机制中@Transactional 无效的原因

Spring中 @Transactional 注解的限制 1. 同一个类中, 一个nan-transactional的方法去调用transactional的方法, 事务会失效If you use (...
  • qq_1017097573
  • qq_1017097573
  • 2017年07月26日 01:34
  • 476

Spring事务机制中@Transactional失效的原因

最近项目中发现spring事务机制中@Transactional会失效,一个方法抛出异常,但是数据库中修改的数据并不会回滚,于是看了一些资料,发现以下情况@Transactional事务会失效。 1....
  • u012470138
  • u012470138
  • 2017年06月23日 10:32
  • 487

Spring Boot(七)增加事务@Transactional

项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(七)增加事务@Transactiona,标记地址...
  • a286352250
  • a286352250
  • 2016年11月14日 12:21
  • 7476

spring @Transactional 配置事务 注意事项

@Transactional spring 配置事务 注意事项     近日来,发现有很多童鞋询问:“Mybatis整合Spring3,事务注解为何不起作用? ”,“已经声明了事务,...
  • u012941162
  • u012941162
  • 2015年05月08日 11:21
  • 1763

@Transactional 无效的解决方案

关于@Transactional注解 一般都认为要注意以下三点 在需要事务管理的地方加@Transactional 注解。@Transactional 注解可以被应用于接口定义和接口方法、类定义和类...
  • gudejundd
  • gudejundd
  • 2017年01月12日 17:36
  • 5607

spring boot的事务管理不起作用@Transactional

表类型是MyISAM,是非事务安全的,所以无法实现数据回滚。  只要修改表的类型即可: ALTER TABLE t1 ENGINE = InnoDB...
  • lwang_IT
  • lwang_IT
  • 2018年01月05日 12:24
  • 133

SpringMVC+Spring3.2+Hibernate4.2 @Transactional 事务不成功原因

研究N久,发现是springMVC的配置文件和Spring的配置文件内容有冲突,在配置扫描包的时候,springMVC配置到具体controller的包路径就好。 原来配置的太粗粒度了。两个配置文件都...
  • javalover_yao
  • javalover_yao
  • 2013年10月21日 19:57
  • 1413

Spring MVC @Transactional注解方式事务无效的解决方法

首先看了配置文件关于事务管理都没有问题,然后在service的实现业务类方法加上@Transactional注解,发现 事务没有生效,正常情况下应该会有数据库回滚操作。 配置文件: web.x...
  • qiaoshuai0920
  • qiaoshuai0920
  • 2016年08月05日 08:06
  • 6296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring @Transactional 配置无效 注意事项
举报原因:
原因补充:

(最多只允许输入30个字)