<p>shardingsphere在服务启动时会去加载表的元数据,导致启动缓慢,如果分表数量多,启动一次等待个上百秒都是可能的。可以添加扫描的线程的并发数量加快扫描速度</p>
讯享网
讯享网
添加后再启动发现快了一点,效果不明显。
通过debug代码可以发现,慢的根源是ColumnMetaDataLoader#load这个方法,需要去查db信息,表多的话需要查询数量多,就耗时越高。分表的表元数据其实基本都是一样的,例如tabale_0到table_127,这128张表的元数据都是相同,其实只要查一次就够了。所以我们可以调整一下ColumnMetaDataLoader的逻辑,想办法让它获取分表元数据时只查询一次。
首先我们会想到使用aop去对原逻辑做切面调整,但是ColumnMetaDataLoader这个是不归spring管理的类,spring提供aop是无法对这个逻辑做处理的,这时可以通过javaAgent去修改字节码。我们用一个小工具集成javaagent完成对字节码的修改。
maven引入依赖

然后添加代码对ColumnMetaDataLoader逻辑做调整
讯享网
确保ShardingSphereBoostReCoder 这个类能被你的spring容器扫描到,然后启动服务可以发现启动速度提升了很多。首次启动还会把元数据保存到本地硬盘,第二次启动耗时更低。依赖引入那可以加上<scope>test</scope>,然后把这个类移动到test目录下,这样就不会影响到线上逻辑,你本地调试的时候启动也快了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/153045.html