Spring学习笔记之Spring事务及测试

REQUIRED (默认)    业务方法需要在事务中运行,如果方法运行的时候已经开启事务,就加入事务,否则创建新的事务

NOT_SUPPORTED    声明方法不需要开启事务.如果已经开启事务后调用该方法.则先挂起该事务,方法执行完毕后,事务恢复 

REQUIRES_NEW     不管是否存在事务,都另行开启新的事务.如果先前已经开启事务,挂起原先事务.创建新的事务.新的事务执行结束后,恢复原先事务 

MANDATORY    只能在已经存在的事务中执行,不能自行创建事务,如果在没有开启事务的环境下调用,容器抛出例外 

SUPPORTS     墙头草,有事务就在事务中执行.没事务就在没事务的环境下执行 

NEVER    绝对不能在事务中执行.如果执行.抛出例外  

NESTED   如果有事务存在,开启一个新事务嵌套在上层事务中.开启的新事务具有自己独立的回滚点.新事务的回滚不会对外部事务造成影响, 

但是外部事务的提交会直接提交嵌套事务 

如果没有事务存在,则按照REQUIRED属性执行,该属性只对DataSourceTransationManager事务管理器有效 


测试REQUIRED

	
	@Transactional(propagation=Propagation.REQUIRED)
	public void save(UserInfo userInfo) {
		jdbcTemp.update("insert into userinfo (name) values (?)", new Object[]{userInfo.getName()}, 
				new int[]{java.sql.Types.VARCHAR}
		);
		
		UserInfo ui = new UserInfo();
		ui.setId(1);
		ui.setName("updated_suc");
		update(ui);
		throw new RuntimeException("发生了异常");
	}
	@Transactional(propagation=Propagation.REQUIRED)
	public void update(UserInfo userInfo) {
		jdbcTemp.update("update userinfo set name=? where id=?", 
				new Object[]{userInfo.getName(), userInfo.getId()},
				new int[]{java.sql.Types.VARCHAR, java.sql.Types.INTEGER} 
				);
	}

	ApplicationContext context = new ClassPathXmlApplicationContext("jdbcsource.xml");
	UserInfoService userInfoService = (UserInfoService)context.getBean("userInfoService");

	@Test
	public void test1(){
		UserInfo userInfo = new UserInfo();
		userInfo.setName("windskymr1");
		userInfoService.save(userInfo);
	}

结果没有更新id为1的用户信息,证明REQUIRED有效


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值