前言最近开始学习分布式的开发,需要用到分布式事务的处理,于是学习了阿里的分布式事务框架fescar。由于官方的文档尚未完全完成,看官方给的sample的话又不知道哪些配置是必须的,因此在写自己的demo的时候,遇到了不少问题。项目框架SpringBoot+Druid+MybatisPlus+Fescar+Dubbo+Nacos官方样例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模式需要用的数据表。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模式表’;问题与处理日志没有显示连接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”)。这个问题偶尔出现,正常情况下不加scanBasePackages也可以使用(–懵逼脸–)报错: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应该一致。分布式事务不生效 在项目启动后可以正常连接fescar server后,执行@GlobalTransactional的方法,抛出异常后,发现事务并没有回滚。出现这种情况一般是没有配置fescar的DataSourceProxy,必须使用fescar的DataSourceProxy,才可以正常的执行全局事务回滚的操作。比如mybatis,则需要手动注册SqlSessionFactory的bean,并将其中的DataSource替换为fescar的DataSourceProxy,这样才会生效。