zoukankan      html  css  js  c++  java
  • Spring事务银行转账示例

    https://www.imooc.com/video/9331

    声明式事务

    @Transactiona()

    编程式事务

    • 非模板式(不使用TransactionTemplate)

        http://cailangwei.blog.163.com/blog/static/1314585792014895755400/

        applicationContext.xml:   

        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
            p:dataSource-ref="dataSource"/>  
        DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx.getBean("transactionManager");
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务
        TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
        try {
            //逻辑代码
            transactionManager.commit(status);
        } catch (Exception e) {
            transactionManager.rollback(status);
        }
    • 模板式(使用TransactionTemplate)

        spring为了简化手动事务编程,提供了TransactionTemplate这个辅助类,把一些常用逻辑用泛型参数配合方法提供出来。

        https://blog.csdn.net/wang0928007/article/details/7576591

        https://blog.csdn.net/daijin888888/article/details/51822257

        http://wzhw2008.iteye.com/blog/1687523

        编程式注入模板:PaymentServiceImpl.java

        // 注入事务管理的模板 
        @Autowired
        private TransactionTemplate transactionTemplate;

        配置式注入模板:

        <!-- 配置业务层类 -->  
        <bean id="accountService" class="com.zs.spring.demo1.AccountServiceImpl">  
            <property name="accountDao" ref="accountDao" />  
            <!-- 注入事务管理的模板 -->  
            <property name="transactionTemplate" ref="transactionTemplate" />  
        </bean>  

        使用模板包裹业务逻辑

            Object result = transactionTemplate.execute(new TransactionCallback(){
                @Override
                public Object doInTransaction(TransactionStatus status) {
                    // TODO 编写支付业务逻辑
                    return 1;
                }
            });

    银行转账(包含支付宝、微信的接口)

    调用对方的接口,对方的接口设计可能并非幂等的:

    我方系统的order表本来与对应对方系统order,一条订单一条支付记录挺好。但是由于上述的非幂等,就需要增加一个订单流水表(订单号,流水号),来解决客户重复点击支付的问题。

  • 相关阅读:
    linux下vim的安装及其设置细节
    vm虚拟机下ubuntu连接上ssr
    文件写入-结构体排序
    利用链表进行报数游戏
    链表——尾插法
    C#设计模式总结
    C#设计模式(20)——策略者模式(Stragety Pattern)
    Autofac在项目中应用的体会,一个接口多个实现的情况
    C#设计模式(1)——单例模式
    jquery.js与sea.js综合使用
  • 原文地址:https://www.cnblogs.com/rgqancy/p/8757107.html
Copyright © 2011-2022 走看看