LCN基于Spring cloud2.0实现分布式事物管理(二)项目结合

这里启动三个项目,一个发起方,也就是我们常说的消费者,二个参与方,也就是我们常说的提供者,数据库的处理方式采用jpa的方式,这个用mybatis,hibernate都不影响。

项目结构如下:

具体的搭建的方式这里就不讲解,这里先把hystrix给去掉,下一篇讲解存在hystrix的情况,采用一个简单的例子,这边要创建用户并且要给这个用户赋予相应的权限。

vts_sc_lcn_jpa : 消费者,事物发起方

vts_sc_lcn_jpa1:权限管理,提供者,事物参与方,时间原因,这里就没有对其实现。

vts_sc_lcn_jpa2:角色管理,提供者,事物参与方

vts_sc_lcn_jpa3:用户管理,提供者,事物参与方

vts_sc_lcn_jpa发起创建用户的需求,代码,如下,这里故意吧pkUser设置为空,让后面的业务参数异常。

	@Autowired
	private RoleService roleService;
	
	@Autowired
	private UserService userService;

	@Override
	@TxTransaction(isStart = true)
	@Transactional
	public String createUser(String pkRole,List<String> pkAuth) {
		// TODO Auto-generated method stub
		String pkUser = userService.createUser();
		System.out.println(pkUser);
		pkUser = null;
		roleService.bindRole(pkRole, pkUser);
		return "调用成功";
	}

vts_sc_lcn_jpa2:事物参与方,提供创建用户,代码如下:

	/**
	 * 注入用户数据Dao
	 */
	@Autowired
	private VTSUserDao vtsUserDao;
	
	@Override
	@Transactional
	@TxTransaction
	public String createUser() {
		// TODO Auto-generated method stub
		VTS_User vts_User = new VTS_User();
		vts_User.setUserCode("大仙");
		vts_User.setUserName("大仙");
		vtsUserDao.save(vts_User);
		return "保存成功";
	}

vts_sc_lcn_jpa3:事物参与方,提供绑定角色,代码如下:


	@Override
	@Transactional
	@TxTransaction
	public String bindRole(String pkRole, String pkUser) {
		// TODO Auto-generated method stub
		if(pkUser==null){
			throw new RuntimeException("绑定角色错误");
		}
		return "绑定成功";
	}

我们这里加了个判断,如果用户是空,直接抛出异常。

启动三个应用,访问相应的请求路径。

发起方抛出如下异常:

查询数据库,用户是否插入:

 数据库无相应的数据,事物管理成功,我们可以看到异常是vts_sc_lcn_jpa3发出,但是vts_sc_lcn_jpa2的数据也相应的回滚了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值