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,這樣纔會生效。
相關文章
相關標籤/搜索