Spring事务问题记录
来源:互联网 发布:js中复选框的用法 编辑:程序博客网 时间:2024/05/20 04:27
1. spring配置xml事务与开启注解事务的覆盖问题
通过xml aop配置事务,同时开启注解@Transactional事务,并在类文件上声明时,注解事务的优先级高于配置文件,即会覆盖配置文件的事务配置。
如下面的配置:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "><!-- 开启Annotation注解注入配置 --><context:annotation-config /><!-- 读取属性文件 --><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:com/spring/demo/config/database.properties</value></list></property></bean><!-- 整合jdbc配置 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driverClassName}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- 事务配置 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean> <!-- 配置aop 切入点 和事务访问策略 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.spring.demo.service.impl.*.*(..)) || execution(* com.*.dao.impl.*.*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/></aop:config><tx:advice id="txAdvice" > <tx:attributes><tx:method name="del*" propagation="REQUIRED"/><tx:method name="save*" propagation="REQUIRED"/><tx:method name="add*" propagation="NOT_SUPPORTED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="create*" propagation="REQUIRED"/><tx:method name="get*" read-only="true"/><tx:method name="query*" read-only="true"/><tx:method name="select*" read-only="true"/><tx:method name="*" read-only="true" propagation="REQUIRED"/></tx:attributes></tx:advice> <!-- 启用注解事务(通常两种事务开启一种即可,或配合使用) --><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /><context:component-scan base-package="com.spring.demo.service.impl" /><context:component-scan base-package="com.spring.demo.dao.impl" /><!-- SpringJdbc配置 --><bean id="jdbcTemplte" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean></beans>
同时在Service类上声明@Transactional,代码如下:
@Service@Transactional(rollbackFor = Exception.class)public class PersonServiceImpl implements PersonService{@Autowired<span style="white-space:pre"></span>private PersonDao personDao;@Overridepublic void addPerson(String name) {personDao.addPerson(name);int i = 1 / 0;}}
即配置文件中无事务,而注解中有事务,注解覆盖了配置文件而使这个addPerson方法具有事务,异常后事务回滚。
2. 事务不生效的一种情况
springmvc-servlet.xml这个文件即springmvc的配置文件中扫描包时,只扫描controller所在包,而不能扫描service与dao所在包,否则会导致service与dao事务失效。
正确:
<!-- 自动扫描包的注解 --><context:component-scan base-package="com.spring.demo.controller" />
错误:
<!-- 自动扫描包的注解 --><context:component-scan base-package="com.spring.demo.controller" /><context:component-scan base-package="com.spring.demo.service" /><context:component-scan base-package="com.spring.demo.dao" />
0 0
- Spring事务问题记录
- spring事务问题排查记录一下
- Spring事务学习记录
- spring与mybatis整合的事务问题记录
- java spring分布式事务(记录)
- Spring 事务+AOP日志记录
- Spring AOP 事务问题
- spring 事务问题
- spring事务问题
- spring事务提交问题
- spring 事务传播问题
- spring事务问题
- spring 事务问题
- Spring 事务失效问题
- Spring事务相关知识的记录
- spring管理的事务中的日志记录
- spring事务嵌套容易产生重复记录
- spring事务问题:没有提交
- SQLITE3 使用总结
- for循环知识点总结(一)
- NGUI的textlist和Scroll bar的设计
- JAVA Math floor() round()
- Android Launcher分析和修改5——HotSeat分析
- Spring事务问题记录
- 最火HTML5 JavaScript游戏引擎:国外篇(一)
- leetcode——Recover Binary Search Tree
- Apache 301重定向,以及根据主机名配置虚拟主机
- 非版本化数据进行历史归档提示:Failed to enable archiving. Invalid column data type
- sql链接查询
- QPushButton显示“&”
- 惠州做开眼角对视力有没有影响?
- Java中的反射机制(二) 一个利用反射进行对象拷贝的例子