springboot+fescar注意事项

前言

最近开始学习分布式的开发,须要用到分布式事务的处理,因而学习了阿里的分布式事务框架fescar。
因为官方的文档还没有彻底完成,看官方给的sample的话又不知道哪些配置是必须的,所以在写本身的demo的时候,遇到了很多问题。git

项目框架

SpringBoot+Druid+MybatisPlus+Fescar+Dubbo+Nacosgithub

官方样例

https://github.com/fescar-gro...
个人demo:https://github.com/ksyzz/fesc...数据库

准备工做

1,开发前须要启动nacos注册中心和fescar server
2,将sample中的file.conf和registry.conf放到本身的resource目录下。
3,在对应的数据库中,建表'undo_log',该表是fescar的AT模式须要用的数据表。mybatis

CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='fescar AT模式表';

问题与处理

  1. 日志没有显示链接fescar server的信息:
    项目正常配置后,日志会显示链接fescar server的信息,例如:c.a.f.core.rpc.netty.RmRpcClient - will connect to 127.0.0.1:8091。说明fescar的配置没有生效。须要在 @SpringBootApplication中添加scanBasePackages 的信息: @SpringBootApplication(scanBasePackages = "com.ksyzz.common.config")。
    这个是由于个人相关配置放在另外一个模块里,因此须要将另外一个模块扫描进来
  2. 报错:ERROR c.a.f.core.rpc.netty.TmRpcClient : no available server to connect.
    出现该问题,首先检查fescar server是否启动,若是已经启动,那么检查下面两个配置是否一致:
    file.conf中,service{vgroup_mapping.xxx="localRgoup"}和建立GlobalTransactionScanner的bean的代码中的return new GlobalTransactionScanner(applicationName, "xxx");两个位置的xxx应该一致。
  3. 分布式事务不生效 在项目启动后能够正常链接fescar server后,执行@GlobalTransactional的方法,抛出异常后,发现事务并无回滚。出现这种状况通常是没有配置fescar的DataSourceProxy,必须使用fescar的DataSourceProxy,才能够正常的执行全局事务回滚的操做。好比mybatis,则须要手动注册SqlSessionFactory的bean,并将其中的DataSource替换为fescar的DataSourceProxy,这样才会生效。
相关文章
相关标签/搜索