美团Leaf踩坑使用记

805 阅读2分钟
                 项目开发中要用到分布式分段id生成器,开始自己写了个Java版本,有bug,后面看到美团Leaf,想到有大厂背书,就没必要自己造轮子了,果断跟进。然后陷入了3天的折腾中,总算今天顺利整合成功
  1. leaf-spring-boot-starter 1.0.1-RELEASE使用 可以参考 github.com/Meituan-Dia… 1.0.1--RELEASE按照官网文档参考可以正常使用,这里有两个问题 image.png leaf1.0.1-RELEASE starter版本在maven center中找不到,按照Quik Start安装到本地仓库的步骤有点问题 应该是先git clone拉取到本地后,然后cd Leaf,再 git checkcout后,然后用mvn命令安装到本地仓库。后面再按照官网的配置操作,加上 @EnableLeafServer注解,基本可以走通,由于项目要使用私有仓库,且本人没有私有仓库上发布内容的权限。1.0.1--RELEASE版方案废弃,中间还有个小插曲,在maven center中找到了1.0.1-release的Leaf-core jar包,然后引入后,折腾半天,死活没能跑通。只好彻底放弃了1.0.1-RELEASE

  2. 1.0.2版本Starter使用

可以参考gitee.com/hellothomas…, 这个版本的starter可以从maven仓库引入使用,然后兴冲冲按照官网文档操作一番后,发现始终报错,报错的内容似乎是数据源问题,测试的项目使用的spring boot中的dataSource,而Leaf源码中使用的是Druid dataSource image.png 官网中的数据源配置写的很模糊,就配了个data-source-name参数,我按照我自己的数据源配置image.png 配置成defaultDataSource始终跑不起来,然后网上搜一大圈也没找到可参考的资料,后面想既然是数据源有问题,我参考1.0.1--RELEASE再配一个数据源,是否可以呢?修改application.properties,增加一个leaf的数据源配置 image.png 终于成功跑通,我这里用的是Leaf seagment分段模式,数据建表以及引用service生成sequence的代码可以参照官网。

3.去掉Leaf原有的Druid datasource取法,直接通过beanFactory去获取springboot自动配置的DataSource

这种配两个数据源的方法感觉特别扭,就想着能否共用一个数据源?然后参考了这个帖子 juejin.cn/post/714345… 在自己项目中建立了一个SegmentService public class SegmentService implements BeanFactoryAware { 代码基本按照帖子上照搬,然后去掉了applicatioin.properties中的三个leaf.jdbc配置参数,单元测试了一把,成功打印出想要的序号,至此3天的折腾总算圆满结束,期间甚至在晚上折腾到了凌晨一点,而毫无头绪。为了让其他的小伙伴们顺利使用大厂工具,少走弯路,特意将踩坑经历总结一番,也省掉大家熬夜码代码的痛苦。