注解声明式管理配置:
首先在spring.xml添加声明网址
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
接下来 在spring.xml 中添加
<!-- transaction support--> <!-- PlatformTransactionMnager --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- enable transaction annotation support --> <tx:annotation-driven transaction-manager="txManager" />
需要添加一个jar包,aopalliance.jar
事务隔离级别:
隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:
- TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
- TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。
- TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
- TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
- TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
事务传播行为:
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:
- TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
- TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
- TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
- TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
- TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
- TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
事务超时:
所谓事务超时,就是指一个事务所允许执行的最长时间,如果超过该时间限制但事务还没有完成,则自动回滚事务。在 TransactionDefinition 中以 int 的值来表示超时时间,其单位是秒。
默认设置为底层事务系统的超时值,如果底层数据库事务系统没有设置超时值,那么就是none,没有超时限制。
事务只读属性
只读事务用于客户代码只读但不修改数据的情形,只读事务用于特定情景下的优化,比如使用Hibernate的时候。
默认为读写事务。
spring事务回滚规则
指示spring事务管理器回滚一个事务的推荐方法是在当前事务的上下文内抛出异常。spring事务管理器会捕捉任何未处理的异常,然后依据规则决定是否回滚抛出异常的事务。
默认配置下,spring只有在抛出的异常为运行时unchecked异常时才回滚该事务,也就是抛出的异常为RuntimeException的子类(Errors也会导致事务回滚),而抛出checked异常则不会导致事务回滚。
可以明确的配置在抛出那些异常时回滚事务,包括checked异常。也可以明确定义那些异常抛出时不回滚事务。
还可以编程性的通过setRollbackOnly()方法来指示一个事务必须回滚,在调用完setRollbackOnly()后你所能执行的唯一操作就是回滚。
@Transactional注解
@Transactional属性
value | String | 可选的限定描述符,指定使用的事务管理器 |
propagation | enum: Propagation | 可选的事务传播行为设置 |
isolation | enum: Isolation | 可选的事务隔离级别设置 |
readOnly | boolean | 读写或只读事务,默认读写 |
timeout | int (in seconds granularity) | 事务超时时间设置 |
rollbackFor | Class对象数组,必须继承自Throwable | 导致事务回滚的异常类数组 |
rollbackForClassName | 类名数组,必须继承自Throwable | 导致事务回滚的异常类名字数组 |
noRollbackFor | Class对象数组,必须继承自Throwable | 不会导致事务回滚的异常类数组 |
noRollbackForClassName | 类名数组,必须继承自Throwable | 不会导致事务回滚的异常类名字数组 |
用法
@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。
此文档是写给自己的记录用的,若果有什么不全的或者好的建议,希望能回复,谢谢
相关推荐
然而,在实际开发过程中,可能会遇到使用Spring MyBatis纯注解方式配置的事务无法正常提交的情况,尤其是在使用Oracle数据库时更为常见。 ### 问题描述 本文主要针对在Spring + MyBatis环境下,或使用Spring JDBC...
3. **配置MyBatis**:创建MyBatis的配置文件(如:mybatis-config.xml),设置数据源、事务管理器等。同时,定义Mapper XML文件,其中包含SQL语句和结果映射。 4. **编写Mapper接口**:在Java代码中,创建Mapper...
4. **事务配置**:在Spring中,事务管理有两种方式:编程式事务管理和声明式事务管理。通常我们采用声明式事务管理,通过`<tx:annotation-driven>`标签启用基于注解的事务管理。事务的传播行为、隔离级别、超时时间...
接下来,重点讲解了Spring与MyBatis的集成过程,包括Spring的DataSource配置、事务管理、以及MyBatis-Spring的使用,让读者了解如何在Spring环境中优雅地使用MyBatis进行数据访问。此外,书中还会涉及Spring MVC的...
整合Spring和MyBatis时,需要在Spring配置文件中定义DataSource、SqlSessionFactoryBean以及MapperScannerConfigurer,以便Spring管理MyBatis的SqlSessionFactory和Mapper接口。MapperScannerConfigurer扫描指定包下...
Spring框架是Java企业级应用的基石,它提供了丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理以及容器管理等。在Spring框架中,DI是核心特性,允许开发者将对象的创建和维护交给Spring容器,降低了...
在本项目"springmybatis(含有mybatis-generator示例)"中,主要展示了如何将Spring、Spring Web MVC和MyBatis框架进行集成,并且利用MyBatis Generator自动化工具生成数据库操作的代码,使得开发过程更为高效。...
总结,Spring Mybatis Ext的整合为Java开发带来了极大的便利,它不仅简化了配置,提升了开发效率,而且通过Spring的特性,使得事务管理、AOP应用和测试都变得更加容易。理解并掌握这种整合方式,对于提升Java开发的...
3. 配置MyBatis:创建MyBatis的配置文件(mybatis-config.xml),定义数据源、事务管理器和Mappers。 4. 编写Mapper接口和SQL映射文件:定义Mapper接口,编写对应的XML映射文件,指定SQL语句和结果映射。 5. 使用...
Struts2SpringMybatis 增删改查,里面的Struts2,spring,Mybatis配置文件都是模块化的管理,实现了社会版本的配置,不再是个人玩弄的小项目。具体的 sql语句也已经加到了WEBRROT目录下面了,自己下载下来可以详细看...
通过配置,Spring可以管理MyBatis的SqlSessionFactory,实现数据源和事务的控制。 2. **MyBatis配置**:MyBatis的配置文件(mybatis-config.xml)定义了数据库连接信息,Mapper扫描路径等。此外,每个Mapper接口...
1. **配置文件**:包括Spring的bean配置文件(如`applicationContext.xml`)和MyBatis的配置文件(如`mybatis-config.xml`),它们定义了数据源、事务管理器、SqlSessionFactory以及Mapper接口的扫描路径。...
- `spring-context.xml`是Spring的核心配置文件,这里会定义Bean,包括Spring MVC的DispatcherServlet配置、数据源配置、事务管理器配置、以及MyBatis的SqlSessionFactoryBean等。 - 数据源配置(DataSource):...
在IT领域,尤其是在Java开发中,Spring框架与MyBatis框架的结合是常见的技术栈,它们在处理数据库操作时,事务管理是至关重要的一个环节。本文将深入探讨"spring+mybatis的声明式事务"这一主题,帮助你理解并掌握这...
最后,`springMybatis`可能是指项目的根目录或者模块名称,通常包含`src/main/resources`下的Mybatis配置文件、Mapper接口和XML文件,以及`src/main/java`下的业务逻辑和服务层代码。 综上所述,"Spring整合Mybatis...
- **事务管理**: 配置事务管理器,通常使用`PlatformTransactionManager`,并配合Spring的事务注解进行事务控制。 2. **Spring Boot整合Mybatis原理** - **起步依赖**: Spring Boot通过starter-persistence自动...
综上所述,"Spring+Mybatis+事务"的组合在Java后端开发中占据着重要地位,这个压缩包"Spring_Mybatis"可能包含了Spring和MyBatis的集成配置,以及如何在Spring中进行事务管理的示例。对于学习者来说,这是一个很好的...
3. 配置Spring MVC:设置DispatcherServlet,配置HandlerMapping和HandlerAdapter。 4. 配置MyBatis:编写mybatis-config.xml,包含数据源、事务管理器、环境等信息。 5. 配置Mapper:创建Mapper接口和对应的XML文件...
- **Spring的Bean管理**:Spring通过Bean定义来管理MyBatis的SqlSessionFactory,通常会配置一个SqlSessionFactoryBean,它会在启动时读取MyBatis的配置文件并创建SqlSessionFactory。 - **Mapper接口与Mapper XML...
mybatis-spring是一个桥梁库,它使得Spring和MyBatis能够无缝协作,提供更好的事务管理和对象关系映射功能。 1. Spring框架:Spring 3.2作为经典的版本,提供了如下的核心特性: - **依赖注入**:通过XML配置或...