您的位置:首页 > 编程语言 > Java开发

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

2015-06-10 07:46 441 查看
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有效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: