service层spring事务配置(基于注解)
Posted 星力量
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了service层spring事务配置(基于注解)相关的知识,希望对你有一定的参考价值。
service层spring事务配置(基于注解)
一、导入Maven依赖包
<!-- 事务通知 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency><!-- spring 依赖包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.0.RELEASE</version> </dependency>
二、事务配置文件 spring-transaction.xml
<!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <!-- transactionManager --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 使用annotation注解方式配置事务 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> <!-- 定义事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 方法过滤规则 --> <tx:attributes> <!-- 只读 --> <tx:method name="get*" read-only="true"/> <tx:method name="query*" read-only="true"/> <!-- 默认使用事务 --> <tx:method name="*" propagation="REQUIRED" timeout="60" rollback-for="java.lang.RuntimeException,java.lang.Exception"/> </tx:attributes> </tx:advice> <!-- 定义AOP配置 --> <aop:config> <!-- 切入点 --> <aop:pointcut expression="execution (* com.*.service.impl.*.*(..))" id="servicePointcut"/> <!-- 适配 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/> </aop:config> 三、事务注解 @Transactional@Transactional public class MessageServiceImpl implements MessageService
四、注意事项 1. 首先使用如下代码 确认你的bean 是AopProxy代理的对象:AopUtils.isAopProxy()//
AopUtils.isCglibProxy() //cglib
AopUtils.isJdkDynamicProxy() //jdk动态代理
2. context:component-scan 重复扫描(bean实例化多次)可能影响事务;
3. 基于类的代理而非接口,如果想代理父类的方法,可以用execution(* com.youcompany..service..*+.*(..))
4. 数据库必须支持事务,否则spring事务不起作用(异常时无法回滚事务);
以上是关于service层spring事务配置(基于注解)的主要内容,如果未能解决你的问题,请参考以下文章
Spring基础(十六):Spring事务管理注解方式和XML配置方式
spring--声明式事务(包含基于注解和基于xml文件的配置方式)