在上次使用xml配置声明式事务的基础上继续改造
xml配置声明式事务链接:https://blog.youkuaiyun.com/qq_41172416/article/details/82285160
此处省略部分代码 . . . . . .
applicationContext.xml文件
注意:我注释了上次使用xml声明事务的代码
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 获得sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 映射数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 映射mybatis核心配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 映射mapper文件 -->
<property name="mapperLocations">
<list>
<value>classpath:com/bdqn/dao/**/*.xml</value>
</list>
</property>
</bean>
<!--使用(MapperScannerConfigurer)创建的所有映射器实现都会被自动注入sqlSessionFactory实例 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置了多个sqlSessionFactory时,需要指定所依赖的sqlSessionFactory实例 -->
<property name="basePackage" value="com.bdqn.dao" />
</bean>
<!--配置扫描注解定义的业务 Bean -->
<context:component-scan base-package="com.bdqn.service" />
<!-- 定义事务管理器 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--通过<tx:advice>标签为指定的事务管理器设置事务属性 -->
<!-- <tx:advice id="txAdvice" transaction-manager="txManager">
定义属性,声明事务规则
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" read-only="false" rollback-for="" no-rollback-for=""/>
</tx:attributes>
</tx:advice> -->
<!-- 定义切面 -->
<!-- <aop:config>
定义切入点
<aop:pointcut id="serviceMethod" expression="execution(* com.bdqn.service..*.*(..))" />
将事务增强与切入点组合
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config> -->
<!-- 使用注解实现声明式事务 -->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
service层
注意:我在此类中添加了一个public void addUser(List<User> users)方法并且抛出了异常,如果出现异常则添加失败,否则,添加成功。
package com.bdqn.service.user;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.bdqn.dao.user.UserMapper;
import com.bdqn.pojo.User;
@Transactional
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
@Transactional(propagation=Propagation.SUPPORTS)
public List<User> findUserList(User user) throws Exception {
try {
return userMapper.getUsers(user);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
@Override
public void addUser(List<User> users) {
for (User u: users) {
addUser(u);
int i=2/0;
}
}
}