Sharding JDBC 4.0.1 踩坑记录
前言由于数据量的增长,我们项目的MySQL数据库逐渐力不从心了,经过分析,决定对数据量特别大几张表做水平分表,考虑到公司使用DevOps做运维,想加入MyCat中间件十分困难,因此决定尝试使用更为轻便的Sharding JDBC。查看官方网站后发现目前最新版为4.0.1版本,于是打算做一次吃螃蟹的人。下面主要记录集成过程中遇到的坑。正文由于我们项目中用到了springboot 2...
前言
由于数据量的增长,我们项目的MySQL数据库逐渐力不从心了,经过分析,决定对数据量特别大几张表做水平分表,考虑到公司使用DevOps做运维,想加入MyCat中间件十分困难,因此决定尝试使用更为轻便的Sharding JDBC。查看官方网站后发现目前最新版为4.0.1版本,于是打算做一次吃螃蟹的人。下面主要记录集成过程中遇到的坑。
正文
由于我们项目中用到了springboot 2.1.0,因此在pom中引入jar包:
<!-- for spring boot -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding-sphere.version}</version>
</dependency>
接下来参照官方配置手册对application.yml进行了配置,注释掉了之前的dataSource。分别实现PreciseShardingAlgorithm和RangeShardingAlgorithm接口,完成了分表业务逻辑开发。然后启动项目,报错找不到数据源。打开IDEA的Project Structure:
发现lib里面并没有正确引入shardingsphere相关依赖,于是在lib上点击右键选择add copy of添加了依赖。再次启动项目报错:
java.lang.ClassNotFoundException: com.google.common.base.Function
经过查询发现是缺少selenium-server-standalone.jar导致的,于是上maven中央仓库查询发现最新版本为2.53.0,于是引入:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server-standalone</artifactId>
<version>2.53.0</version>
</dependency>
最坑的来了,再次启动项目报错:
java.lang.NoSuchMethodError: org.yaml.snakeyaml.Yaml.<init>(Lorg/yaml/snakeyaml/constructor/BaseConstructor;Lorg/yaml/snakeyaml/representer/Representer;Lorg/yaml/snakeyaml/DumperOptions;Lorg/yaml/snakeyaml/LoaderOptions;Lorg/yaml/snakeyaml/resolver/Resolver;)V
于是根据异常信息找到OriginTrackedYamlLoader.java:70如下:
return new Yaml(constructor, representer, dumperOptions, loaderOptions, resolver);
构造函数不存在,我点击ctrl跟进Yaml类发现引用的是org.seleniumhq.selenium.selenium-server-standalone.jar下面的Yaml类,这个类中确实没有5个参数的构造函数。而springboot2.1.0中带的org.yaml.snakeYaml-1.23.jar中的Yaml是有这个构造函数的,这两个不同jar包中的类路径完全重复了。于是尝试从pom中用exclusion的方式排除错误的Yaml类,但elenium-server-standalone.jar中的Yaml类并不是引用的jar所以无法排除,尝试失败,于是考虑改变class加载顺序,当存在重复类时,先加载的类会成功,后加载的会被舍弃。
经过查询得到的方法是修改classpath里面的顺序,IDEA只有iml文件,于是把selenium-server-standalone.jar丢到了最后,测试无效。
于是尝试修改Project Structure的Modules中的Dependencies顺序,仍然无效。
最后居然想出了一个奇招,重新用Maven install selenium-server-standalone.jar这个包,修改其groupId和artifactId,分别在前面加上一个z使该包排序在最后。
mvn install:install-file -Dfile=D:\chromeDownloads\selenium-server-standalone-2.53.0.jar -DgroupId=zorg.seleniumhq.selenium -DartifactId=zselenium-server-standalone -Dversion=2.53.0 -Dpackaging=jar
然后启动项目,居然成功了。
但这个方法始终不是很放心,然后搜索了一下selenium-server-standalone.jar发现2.53.0并不是最新版,最新版本是4.0.0-alpha-2。
漫长的下载后,安装到本地maven仓库,修改依赖版本,启动项目,成功!
但是进行数据库查询时还是报错了。最后引入依赖:
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.7.2</version>
</dependency>
终于分表成功了。
更多推荐
所有评论(0)