基于 SPI 机制实现 ShardingJDBC 的 Nacos 数据源配置

ShardingJDBC 的配置源路径 SPI 机制 由于最新版本 ShardingJDBC 不再支持基于 Nacos 作为配置数据源的功能,可以从 ShardingSphere JDBC 的依赖包中观察到,其数据源配置的获取接口 org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereDriverURLProvider 采用了 SPI 机制,但其默认仅实现了以下几种配置获取方式: AbsolutePathDriverURLProvider(绝对路径)、ClasspathDriverURLProvider (Class Path 路径) 和 ApolloDriverURLProvider (Apollo 路径)。 因此需要自行基于 ShardingJDBC 的 SPI 机制对 ShardingJDBC 进行二次开发,以实现从 Nacos 获取数据源配置文件。 ShardingJDBC 配置获取的源码分析 根据该接口的包路径 org.apache.shardingsphere.driver.jdbc.core.driver ,可以找到其接口及其实现类,该接口包含两个方法: boolean accept(String url):校验当前 url 是否应该使用当前类获取配置 byte[] getContent(String url):从该 url 获取配置文件,并返回字节数组 如果将配置文件 db-sharding.yaml 放在 src/main/resources 目录下,并使用 classpath 作为配置文件的路径(如 spring.datasource.url=jdbc:shardingsphere:classpath:db-sharding.yaml),并在 ClasspathDriverURLProvider 类的 accept 方法中打断点并启动服务,可以发现在上层使用了 ShardingSphereDriverURLManager 类来对每个实现类进行遍历,分别调用 accept 校验当前 url 是否适用于当前类,若适用则调用其 getContent 方法从该 url 获取相应的配置文件。 ...

January 20, 2026 · 3 min

Docker 容器下的 MySQL 主从同步

创建宿主机 Docker 容器挂载目录 mkdir -p /var/lib/mysql/master1/conf mkdir -p /var/lib/mysql/master1/data mkdir -p /var/lib/mysql/slave1/conf mkdir -p /var/lib/mysql/slave1/data 创建 MySQL 主从配置文件 创建主库配置文件(宿主机路径为 /var/lib/mysql/master1/conf/my.cnf): [mysqld] character-set-server = utf8 lower-case-table-names = 1 # 主从复制,主机配置,主服务器唯一ID server-id = 1 # 启用二进制日志 log-bin=mysql-bin # 设置logbin格式 binlog_format = STATEMENT 创建从库配置文件(宿主机路径:/var/lib/mysql/slave1/conf/my.cnf): [mysqld] character-set-server = utf8 lower-case-table-names = 1 # 主从复制,从机配置,从服务器唯一ID server-id = 2 # 启用中继日志 relay-log = mysql-relay 授权文件夹: chmod -R 777 /var/lib/mysql 需要注意的是,主从的 my.cnf 文件权限不能为 777,否则 my.cnf 文件无法在容器内生效,在登陆 Docker 容器内的 MySQL 时会提示:mysql: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored。解决办法是修改宿主机上主从的 my.cnf 权限为更低的 644: ...

December 30, 2025 · 2 min