Spring学习_05_Spring中事物属性
来源:互联网 发布:电脑管家数据恢复收费? 编辑:程序博客网 时间:2024/06/01 23:52
在前面的“Spring学习_04_Spring和Hibernate整合数据源(DataSource)”一文中,我们没有指定我们事务的属性,现在我们为其加上我们事务的属性。更改我们service的代码如下:
@Transactional(propagation=Propagation.REQUIRED,readOnly=false)public void add(User user) {userDAO.save(user);addMsg();}@Transactional(propagation=Propagation.MANDATORY,readOnly=false)public void addMsg(){Msg msg = new Msg();msg.setLog("a user saved!");msgDao.save(msg);}这里我们将前面的方法add拆分成了两部分,这样做的用意是测试使用的传播属性(propagation)。
事物的传播属性有以下几个取值(很重要,尤其是REQUIRED。要理解什么事事务的传播特性)(来自于spring文档):
MANDATORY
Support a current transaction, throw an exception if none exists.
NESTED
Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else.
NEVER
Execute non-transactionally, throw an exception if a transaction exists.
NOT_SUPPORTED
Execute non-transactionally, suspend the current transaction if one exists.
REQUIRED
Support a current transaction, create a new one if none exists.
REQUIRES_NEW
Create a new transaction, suspend the current transaction if one exists.
SUPPORTS
Support a current transaction, execute non-transactionally if none exists.这里我们在一个方法中取值为REQUIRED(默认值),表明如果调用add方法的时候没有事务就创建一个,如果有事务了就用已经存在的事物,而我们的add方法实在测试方法中调用的,那个时候是不存在事务的,所以此处如果设置为MANDATORY,就会报错。但是我们在add中调用addMsg方法是,由于在add方法中已经存在了一个事务,所以这个时候指定MANDATORY没有任何问题,他会使用已经存在的事务。
另外属性是readonly,如果在这里设置为true,表明在事务所在的方法中只会对数据库做只读操作,凡是涉及到insert,update,delete的方法都不会允许执行。所以上面如果我们在add和addMsg方法中我们设置readonly=true的话,则往数据库中插入数据的时候,就会报错。这个属性完全是spring用来对数据库操作进行优化的,通俗来说就是readonly对应的Connection的效率要比readwrite的Connection的效率要高很多。
isolation:事物的隔离级别,这个和Hibernate中完全一样。
timeout:设置事物的超时时长是多少。
rollbackfor:指出发生那种异常的时候,会造成事务回滚,这个默认是发生RuntimeException。一般事务运行的时候发生运行时异常回滚就是在这里设置的,其他几个属性同样道理,不做细说。
0 0
- Spring学习_05_Spring中事物属性
- Spring学习_06_Spring中事物属性(XML方式)重要
- 详解spring事物属性
- spring 事物传播属性
- spring 事物学习
- spring事物学习参考
- Spring 中事物定义
- Spring中事物管理
- Spring源码学习--Spring事物
- spring 事物传播属性和事物隔离级别
- spring中事物传播规则
- spring 中事物的说明
- spring中hibernate的事物
- spring之事物属性源配置实例
- spring 事物 传播属性 与 隔离机制
- spring事物属性与隔离级别
- Spring事物管理——属性分析
- Spring 事物 属性expression="execution(*service..*.*(..))"
- Java语言基础——第十一回 集合框架
- U3D 按下“w”键使人物开始运动,放开则停止
- Ant Counting (poj 3046 分组背包)
- 14 观察者模式
- 回调函数
- Spring学习_05_Spring中事物属性
- 在MATLAB中实现Bayes分类器
- Problem G: 小明在工作
- 17 适配器模式
- leetcode 题解 || Valid Parentheses 问题
- ENVI裁剪
- halcon学习2--boundary算子使用
- 网格特效
- 事务