基于 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 获取相应的配置文件。 ...