spring-8-事务

2020-06-22  本文已影响0人  blank_white

spring 配置文件中需要添加的配置

<!--    声明事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="myDataSource"/>
    </bean>
<!--    事务注解驱动-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

<!--    配置文件配置事务 声明事务方法,指定事务属性-->
    <tx:advice id="advice" transaction-manager="transactionManager">
        <tx:attributes>
<!--            方法名可使用通配符-->
            <tx:method name="bugGoods" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="com.spyouth.ex.GoodsNotEnoughException,java.lang.NullPointerException"/>
            <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.RuntimeException"/>
            <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.RuntimeException"/>
            <tx:method name="*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>
<!--    配置 aop 关联上面的-->
    <aop:config >
        <aop:pointcut id="servicePt" expression="execution(* *..service..*.*(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="servicePt"/>
    </aop:config>

注解方式

public class BuyGoodsServiceImpl implements BuyGoodsService {

    GoodsDao goodsDao;
    SaleDao saleDao;

    @Transactional(propagation = Propagation.REQUIRED,
            timeout = 20,
            isolation = Isolation.DEFAULT,
            rollbackFor = {NullPointerException.class,GoodsNotEnoughException.class}
    )
    @Override
    public void bugGoods(Goods goods) throws NullPointerException,GoodsNotEnoughException{

        Sale sale=new Sale();
        sale.setGid(goods.getId());
        sale.setNums(goods.getNums());
        saleDao.addSale(sale);


        Goods repertoryGoods=goodsDao.selectGoodsById(goods.getId());

        if (repertoryGoods==null){
            //没有商品
            throw new NullPointerException("没有此商品");
        }

        if (repertoryGoods.getNums()<goods.getNums()){
            //库存不足
            throw new GoodsNotEnoughException("库存不足");
        }

        goodsDao.sellGoods(goods);

    }
}
上一篇下一篇

猜你喜欢

热点阅读