ShardingSphere开发者编译指南

Posted 悟初境

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShardingSphere开发者编译指南相关的知识,希望对你有一定的参考价值。

最近需要对接ShardingSphere(后简称SS)做一些开发,所以要编译这个庞大的项目。

环境

文档, 注意一点就是开启git的长文件名,不然clone到一半发现失败了。

git config --global core.longpaths true

编译

文档

因为SS使用了Antlr,需要全局编译才能触发Antlr插件,否则这部分代码编译不到。使用 release的profile。

mvn install -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests -Prelease

运行调试

SS的代码有200多个模块,分得非常细,我这边主要对接 proxy端,所以可以一眼发现 proxy模块。

对应的启动类位于 shardingsphere-proxy-bootstrap模块的 Bootstrap 类。

要调试的话,将 resources/conf/server.yaml 里面修改一些配置:

因为我只是本地调试其他功能,所以不需要集群模式,关于完整模式请看文档.

下面是配置SS的用户名和密码,这里配了2个用户,root和sharding。

mode:
  type: Memory

rules:
  - !AUTHORITY
    users:
      - root@%:root
      - sharding@:sharding
    provider:
      type: ALL_PERMITTED

然后是数据源的配置,修改 conf/config-sharding.yaml:

因为这里不需要分片,所以只配了一个mysql实例,逻辑数据库名称是db,mysql里的数据库是 ds01.

databaseName: db

dataSources:
  ds01:
    url: jdbc:mysql://localhost:3306/ds01
    username: root
    password: 123456

因为需要用到mysql,这里用docker在本地起一个:

docker run --name mysql-ds01 -d -e MYSQL_DATABASE=ds01 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.7

现在就可以启动SS proxy了,运行 org.apache.shardingsphere.proxy.Bootstrap的main方法,成功可以看到日志:

[INFO ] 2022-05-21 14:30:50.607 [main] o.a.s.d.p.s.r.s.RuleAlteredContextManagerLifecycleListener - mode type is not Cluster, mode type='Memory', ignore
[INFO ] 2022-05-21 14:30:50.710 [main] o.a.s.p.v.ShardingSphereProxyVersion - Database name is `MySQL`, version is `5.7.38`, database name is `db`
[INFO ] 2022-05-21 14:30:52.037 [main] o.a.s.p.frontend.ShardingSphereProxy - ShardingSphere-Proxy Memory mode started successfully

然后写一个测试代码:

注意,这里连接的是SS的逻辑数据库 db, 端口也是SS的3307.

@Test
public void test() throws SQLException 

    try (Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3307/db", "root", "root")) 
        final Statement stmt = conn.createStatement();

        stmt.executeUpdate("create table t1(a int, b varchar(10))");

        stmt.executeUpdate("insert into t1 values(1,'hello'),(2,'jimo')");

        final ResultSet rs = stmt.executeQuery("select count(1) from t1");
        rs.next();
        assertEquals(2, rs.getInt(1));
    

接下来就可以在本地debug了。

以上是关于ShardingSphere开发者编译指南的主要内容,如果未能解决你的问题,请参考以下文章

工程设计-shardingsphere源码解读

二分库分表_中间件Sharding-jdbc使用指南

二分库分表_中间件Sharding-jdbc使用指南

图书请看!数据可视化设计指南:图表设计

暑期 2021 参与社区——Apache ShardingSphere

JavaScript面试的完美指南(开发者视角)