Eap使用(7) 事务

 

基于spring mvc

事务配置

spring 配置bean有 xml配置 注解配置 @Bean配置 lambda配置 参考Eap使用(4) 架构设计

目前最新的eap 1.2-SNAPSHOT 采用@Bean方式配置事务bean 方法名必须叫transactionManager

@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory);
    return transactionManager;
}

事务使用

声明式


import org.springframework.transaction.annotation.Transactional;

@Controller
@RequestMapping("/asset/test")
public class ExportImportAssetController implements LogSupport {
    /**
     * 当代码抛出Exception异常时 回滚
     * @return 
     */
    @Transactional(rollbackFor=Exception.class)
    @RequestMapping("test")
    public ModelAndView test(){
    
    }
}

编程式

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;

@Controller
@RequestMapping("/asset/test")
public class ExportImportAssetController implements LogSupport {
    @Autowired
    private PlatformTransactionManager transactionManager;

    @RequestMapping("test")
    public ModelAndView test(){
        /**
         *     your code 
         */
        
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        // 事物隔离级别,开启新事务,这样会比较安全些。
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        // 获得事务状态
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            /**
             *     your code 
             */
            
            //提交事务
            transactionManager.commit(status);
            return new ModelAndView("success").addObject(new OperResult("成功"));
        } catch (Exception e) {
            String message = e.getMessage();
            //回滚
            transactionManager.rollback(status);
            return new ModelAndView("error").addObject(new OperResult("失败"));
        }
    }
}

多数据库使用

比如mysql + mongodb 如何添加事务?

其他参考