简介

源码阅读解析前,肯定是要对其有一个初步的了解,其用于解决问题,用于哪些场景。并上手本地跑一跑官方示例之类,开始阅读解析的第一步,为后面做准备。

阅读解析准备

GitHub和项目官网是了解的好途径:

  • Github address
  • 官网

初步看GitHub的介绍,Apache ShardingSphere是一个由一组分布式数据库解决方案组成的开源生态系统,下面是介绍:

Apache ShardingSphere is an open-source ecosystem consisting of a set of distributed database solutions, including 3 independent products, JDBC, Proxy & Sidecar (Planning). They all provide functions of data scale-out, distributed transaction and distributed governance, applicable in a variety of situations such as Java isomorphism, heterogeneous language and cloud-native.
来源GitHub官网:https://github.com/apache/shardingsphere

更多相关的介绍就自行查看了,刚开始文档肯定是要自己扫一遍,虽然看不太懂,但起码心中有些印象,知道项目大体是做啥的,有哪些模块之类的

下面是本地环境准备阶段:

  • 克隆代码到本地
  • 运行体验代码示例

克隆代码到本地

一般来说直接 git clone 就基本解决了,但国内的特殊环境,ShardingSphere又太大了,没有点其他东西,还拉不下来

注:ShardingSphere有些文件名太长了,需要运行下面的命令进行设置,不然拉不下来:

# git clone 文件名太长
git config --global core.longpaths true

目前解决克隆速度慢有下面几种方法:

1.只克隆最新的一层:使用–depth=1,只拉取代码最新的一层,这样不会拉取代码历史,之前尝试过此方法可行,多试几次基本都能拉下来

git clone --depth=1 https://github.com/apache/shardingsphere

2.使用Chrome Github 下载插件,使用其提供的地址进行克隆,很快很快,也是博主一直以来使用的方法

此方法嗖嗖的,快滴很,如果在线访问安装不了的话,使用博主提供的网盘链接或者去其他地方下载后,本地安装也可以,本地安装的教程链接也放到下面了,可能还需要自己进行一些处理

  • Github 地址
  • Github 加速插件地址
  • 百度网盘链接: https://pan.baidu.com/s/1Fcm2immxryeDJfgilxITug 提取码: 7pxk
  • 国内离线安装 Chrome 扩展程序的方法总结
  • Chrome 手动安装.crx插件

安装完成后,进入GitHub网页,获取加速地址,克隆即可

git clone https://github.com.cnpmjs.org/apache/shardingsphere.git

注:如果是fork的项目,后面需要提pr的,需要将地址修改回非加速地址

3.从Gitee上clone

简单学习之类的,从别人同步到Gitee的项目克隆,因为是国内,也是嗖嗖的

4.下载源码包

也可以直接在GitHub上下载源码包,虽然本地解压后好像没有git历史了,但也够学习之用了,当然,速度也是慢吞吞的…

示例代码运行

使用IDEA打开后,先本地使用Maven工具,clean、install操作下,注意跳过测试

这个如果不使用国内镜像的话,也是比较耗时的

博主看着过去两三分钟还没好,就趁着这段时间下楼跑个步,冲个澡后回来继续

在根目录下有个example目录,右键选择作为Maven工程加载,然后再clean、install一下

数据库准备

这里就使用docker启动一个吧,方便,用户和密码都是root

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

数据库初始化

使用官方提供的数据库初始化脚本:examples/src/resources/manual_schema.sql

表之类的,ShardingSphere好像自己在代码里面操作,后面探索下这个

修改MySQL驱动依赖

提供的示例稍有点问题,在MySQL版本是8+时,会报下面的错误:

Unable to load authentication plugin ‘caching_sha2_password‘

修改MySQL的驱动版本,Maven配置文件是:examples/pom.xml

修改内容如下:

<mysql-connector-java.version>8.0.22</mysql-connector-java.version>

修改配置

修改配置文件,这里修改密码即可,大致如下:examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-databases-range.yaml

dataSources:ds_0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8username: rootpassword: rootds_1:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8username: rootpassword: roo

运行示例

这里选择启动类:examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/YamlRangeConfigurationExampleMain.java

通过看代码能准确知道这个启动类的相关配置文件,就直接选它了

运行起来输出大致如下:

[INFO ] 2021-08-22 07:38:28,331 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Starting...
[WARN ] 2021-08-22 07:38:28,370 --main-- [com.zaxxer.hikari.util.DriverDataSource] Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
[INFO ] 2021-08-22 07:38:28,871 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Start completed.
[INFO ] 2021-08-22 07:38:28,893 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Starting...
[WARN ] 2021-08-22 07:38:28,893 --main-- [com.zaxxer.hikari.util.DriverDataSource] Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
[INFO ] 2021-08-22 07:38:28,908 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Start completed.
-------------- Process Success Begin ---------------
---------------------------- Insert Data ----------------------------
---------------------------- Print Order Data -----------------------
order_id: 636106123225051136, user_id: 1, address_id: 1, status: INSERT_TEST
order_id: 636106123476709376, user_id: 2, address_id: 2, status: INSERT_TEST
order_id: 636106123636092928, user_id: 3, address_id: 3, status: INSERT_TEST
order_id: 636106123833225216, user_id: 4, address_id: 4, status: INSERT_TEST
order_id: 636106124013580288, user_id: 5, address_id: 5, status: INSERT_TEST
order_id: 636106124164575232, user_id: 6, address_id: 6, status: INSERT_TEST
order_id: 636106124336541696, user_id: 7, address_id: 7, status: INSERT_TEST
order_id: 636106124508508160, user_id: 8, address_id: 8, status: INSERT_TEST
order_id: 636106124672086016, user_id: 9, address_id: 9, status: INSERT_TEST
order_id: 636106124839858176, user_id: 10, address_id: 10, status: INSERT_TEST
---------------------------- Print OrderItem Data -------------------
order_item_id:636106123409600513, order_id: 636106123225051136, user_id: 1, status: INSERT_TEST
order_item_id:636106123543818241, order_id: 636106123476709376, user_id: 2, status: INSERT_TEST
order_item_id:636106123749339137, order_id: 636106123636092928, user_id: 3, status: INSERT_TEST
order_item_id:636106123929694209, order_id: 636106123833225216, user_id: 4, status: INSERT_TEST
order_item_id:636106124093272065, order_id: 636106124013580288, user_id: 5, status: INSERT_TEST
order_item_id:636106124248461313, order_id: 636106124164575232, user_id: 6, status: INSERT_TEST
order_item_id:636106124433010689, order_id: 636106124336541696, user_id: 7, status: INSERT_TEST
order_item_id:636106124584005633, order_id: 636106124508508160, user_id: 8, status: INSERT_TEST
order_item_id:636106124747583489, order_id: 636106124672086016, user_id: 9, status: INSERT_TEST
order_item_id:636106124919549953, order_id: 636106124839858176, user_id: 10, status: INSERT_TEST
---------------------------- Delete Data ----------------------------
---------------------------- Print Order Data -----------------------
---------------------------- Print OrderItem Data -------------------
-------------- Process Success Finish --------------
Disconnected from the target VM, address: '127.0.0.1:53730', transport: 'socket'Process finished with exit code

总结

本篇做了下源码阅读前的准备,大致扫了下官方文档,虽然还是比较懵,但起码有个大体印象

然后拉取官方的代码,在本地成功运行了,为后面的分析和调试打下基础

参考链接

  • ShardingSphere
  • ShardingSphere-JDBC小伙伴之Mybatis-plus
  • 6.4.1.2 Caching SHA-2 Pluggable Authentication
  • Chrome导出扩展程序(插件)

ShardingSphere源码解析 初步准备相关推荐

  1. jQuery插件stickup.js 源码解析初步

    这里只是一个初步的解析 stickup.js是一个简单的jQuery插件,源代码只有100多行,它能让页面目标元素 "固定" 在浏览器窗口的顶部,即便页面在滚动,目标元素仍然能出现 ...

  2. Spring源码解析 -- SpringWeb请求映射Map初始化

    简介 在上篇文章中,大致解析了Spring如何将请求路径与处理方法进行映射,但映射相关的初始化对于我们来说还是一团迷雾 本篇文章就来探索下,请求路径和处理方法的映射,是如何进行初始化的 概览 基于上篇 ...

  3. dataset__getitem___PyTorch源码解析与实践(1):数据加载Dataset,Sampler与DataLoader

    献给学习PyTorch在路上或者计划较深入理解PyTorch的同行者们 写在前面 笔者一直使用tf,大势所趋决定转PyTorch,这个系列就作为我学习PyTorch的笔记与心得. 网络上PyTorch ...

  4. ActiveMQ源码解析 建立连接

    作为一个消息中间件,有客户端和服务端两部分代码,这次的源码解析系列主要从客户端的代码入手,分成建立连接.消息发送.消息消费三个部分.趁着我昨天弄明白了源码编译的兴奋劲头还没过去,今天研究一下建立连接的 ...

  5. Flask 上下文源码解析

    简单来说,上下文包括request_ctx(封装了request和session),app_request(封装了app和g),两个ctx都储存在一个叫做Local的数据结构中,这个结构的作用就是会自 ...

  6. Java并发编程之FutureTask源码解析

    上次总结一下AQS的一些相关知识,这次总结了一下FutureTask的东西,相对于AQS来说简单好多呀 之前提到过一个LockSupport的工具类,也了解一下这个工具类的用法,这里也巩固一下吧 /* ...

  7. Mybatis3 源码解析系列

    简介 Mybatis作为一个优秀的Java持久化框架,在我们的日常工作中相信都会用到,本次源码解析系列,就开始探索下Mybatis 总结 在MyBatis的学习中,首先通读了<MyBatis3源 ...

  8. MyBatis3源码解析(7)TypeHandler注册与获取

    简介 在上篇文章中,我们介绍了TypeHandler的简单使用和解析了TypeHandler的处理核心,这篇文章中我们接着看到TypeHandler是如注册和获取使用的 源码解析 TypeHandle ...

  9. SharingSphere 源码解析 -- 真实SQL生成探索

    SharingSphere 源码解析 – 真实SQL生成探索 简介 在上一篇文章中,我们探索了ShardingSphere JDBC Mybatis示例执行的一个大致的过程,找到了SQL处理的关键节点 ...

最新文章

  1. 聊聊Service Mesh:linkerd
  2. 解决“显示桌面”快捷方式的丢失
  3. 选择“Win32汇编”的三大理由?
  4. go中有缓存通道和无缓存通道区别
  5. 【CSS】一侧定宽,另一侧自适应的布局该如何去做
  6. sudo apt-get update
  7. linux 密码复杂度,用PAM 搞定Linux 平台密码复杂度问题
  8. 实战Veeam Backup Replication 9.5 Upgrade to Veeam Backup Replication 10
  9. 使用XPathExpression类对XML文件进行排序
  10. SQLi LABS Less-39
  11. ubuntu以安装包方式安装jdk13
  12. 2018-2019-1 20165204 实验三 实时系统
  13. [51nod1206]Picture
  14. 如何识别pdf文档中的文字(图像识别)python
  15. CDN选择合适的回源策略很重要
  16. 生活随记 - 75公斤重 急需减肥
  17. MySQL联合创始人向Sun递交辞呈
  18. 易语言 hex16进制转换base64编码
  19. 原神ps无法登录服务器未响应,原神公测常见问题与解答,包括配置需求、数据互通问题...
  20. 视频教程-PowerDesigner使用教程-数据仓库

热门文章

  1. CentOS7 Nexus安装
  2. DbEntry on Mono 测试
  3. 类别动态绑定到TreeView控件
  4. ASP.NET AJAX入门系列(8):自定义异常处理
  5. 使用layer的弹窗时,出现layer引入成功,触发成功,控制台无报错,但是页面无变化或者仅出现遮罩层的问题的解决思路
  6. 解决Django Rest Framework中的跨域问题
  7. 剑指offer 面试题59 - II. 队列的最大值
  8. [旧文新读] 深度学习在Airbnb搜索的应用实践
  9. 腾讯 WXG | 技术研究-NLP算法三面复盘
  10. DeepWalk:图网络与NLP的巧妙融合