环境为:springMVC+Spring+mybatis 能正常的CRUD。
首先看一下配置文件。
事务的开启
<!-- 4. 事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 5. 使用声明式事务 transaction-manager:引用上面定义的事务管理器 -->
<tx:annotation-driven transaction-manager="txManager" />
Service层增加事务的注解@Transactional(propagation=Propagation.REQUIRED)
@Transactional(propagation=Propagation.REQUIRED)
public void save(User user) {
mapper.save(user);
}
查看debug级别的日志:
经过一番查阅资料,我发现在Spring-MVC.xml
配置文件里面扫描注解包的控制不对。
<!-- 注解扫描包:注入所有的注解包 -->
<context:component-scan base-package="com.tgb" />
扫描为直接的二级目录下面全部包括controller,Service,dao等。
SpringMVC.xml只要扫描对应的控制器
Spring.xml排除掉controller层
最后修改后的配置:
SpringMVC.xml
只要控制器层。
<!-- 注解扫描包:注入所有的注解包 -->
<context:component-scan base-package="com.tgb.controller" />
Spring.xml
排除掉控制器层。
<context:component-scan base-package="com.tgb" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
日志: