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,一条订单一条支付记录挺好。但是由于上述的非幂等,就需要增加一个订单流水表(订单号,流水号),来解决客户重复点击支付的问题。

  • 相关阅读:
    调起MT096的配置过程
    数据库不能用delete---index空间不足
    cics下任务的停止
    StrTrim()---对string不可以随便用
    update语句
    makefile--Unfound symbol
    文件的读写权限
    makefile--$@
    C++--类的头文件和文件名要一致吗
    Django模板(Templages)
  • 原文地址:https://www.cnblogs.com/rgqancy/p/8757107.html
Copyright © 2011-2022 走看看