Spring的声明式事务----Annotation注解方式

一.applicationContext.xml配置文件

       <!--配置包扫描-->
    <context:component-scan base-package="com.sxt"/>
    <!--读取配置文件-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--配置jdbcTemolate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg name="dataSource" ref="dataSource"/>
    </bean>
     <!--   1.配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--配置数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

二.AccountServiceImpl 业务层代码

@Service
/* @Transactional 
 * 贴上此表示当前类已经被Spring事务管理
 * 注意: @Transactional 只能对当前贴的Service类有效
 *  常用属性 :
 *  	isolation=Isolation.REPEATABLE_READ,  隔离级别
		propagation=Propagation.REQUIRED,传播规则
		readOnly=true 是否只读事务
 *  	
 */@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED)
public class AccountServiceImpl implements AccountService{
	@Autowired
	private AccountDao dao;

	public void trans(Integer transOutId, 
			Integer transInId, Integer money) {
		dao.tranOut(transOutId, money);
		System.out.println(1 / 0);// 模拟断电
		dao.tranIn(transInId, money);
	}
	//单独为某一个方法配置具体的事物细节:如查询方法,事物是只读的
	@Transactional(readOnly=true)
	public Object getUser() {
		//查询操作
		return null;
	}
	@Transactional(readOnly=true)
	public List<Object> getUsers() {
		//查询操作
		return null;
	}
}

三.事物配置的注解和XML配置的选择
Xml配置 : 代码清晰,配置量少,容易维护
注解配置 : 侵入代码,每个Service层类都得配置,针对不同的方法还得配置事务细节:如查询方法配置只读操作,不容易维护
建议选择xml配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值