基于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 如何添加事务?