nacos dameng 达梦数据源 插件开发

本文涉及源码地址:https://gitee.com/tangjingshan/nacos


一、快速白嫖

1)配置达梦数据库

1.1 创建名称为:NACOS,的模式/用户

1.2 导入以下表结构

此表结构未用引号括起来,不区分大小写

NACOS2.2.0的DM表结构.sql

或从以下链接下载:https://gitee.com/tangjingshan/nacos/blob/tjs-study-fetch-master/distribution/conf/dm-schema.sql

2)导出旧数据

2.1 导出旧数据压缩包

nacos dameng 达梦数据源 插件开发_第1张图片

3)配置nacos

3.1 切换到nacos根目录

cd /home/shsnc/snc_product/nacos

3.2 新建文件夹:plugins

mkdir plugins

3.3 上传以下插件包到plugins目录下

https://gitee.com/tangjingshan/nacos/blob/tjs-study-fetch-master/aa-personal/tjs-nacos-plugins/target/tjs-nacos-plugins-dep-1.0.jar

3.4 修改配置文件application.properties

vim ./conf/application.properties

新增以下配置,注意修改DM数据库相关配置,与【步骤1.1保】持一致。其他不用改

#指定数据源为dm
spring.sql.init.platform=dm
#指定数据源驱动
db.pool.config.driverClassName=dm.jdbc.driver.DmDriver
db.num=1

#DM数据库相关配置
db.url.0=jdbc:dm://127.0.0.1:5236/NACOS?characterEncoding=utf8&connectTimeout=1000&socketTi
meout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=xxx
db.password.0=xxx

3.5 重启nacos

sh ./bin/startup.sh -m standalone

4)导入旧数据

4.1 登录【步骤3.5】启动的达梦nacos

4.2 新建命名空间:xxx

nacos dameng 达梦数据源 插件开发_第2张图片

4.3 切换到xxx命名空间

4.4 导入【步骤2.1】的旧数据压缩包

nacos dameng 达梦数据源 插件开发_第3张图片

5)验证

5.1 查看【步骤1.1】的DM数据库中的CONFIG_INFO表,是否有刚刚导入的数据

nacos dameng 达梦数据源 插件开发_第4张图片

5.2 查看【服务管理-服务列表】菜单是否有服务实例信息

nacos dameng 达梦数据源 插件开发_第5张图片

5.3 登录我们系统,验证基础流程是否正常

二、核心原理

1)如何加载插件jar包(loader.path机制)

启动脚本会指定插件包位置为:-Dloader.path=${BASE_DIR}/plugins

nacos dameng 达梦数据源 插件开发_第6张图片

loader.path机制为打包插件spring-boot-maven-plugin提供的,该机制下实际启动类会变成org.springframework.boot.loader.PropertiesLauncher#main,且类会由org.springframework.boot.loader.LaunchedURLClassLoader这个类加载器加载

2)如何低耦合扩展不同数据源(SPI机制)

a. 抽取各个表的sql接口,不同的数据源实现返回不同语法的sql

nacos dameng 达梦数据源 插件开发_第7张图片

nacos dameng 达梦数据源 插件开发_第8张图片

b. ServiceLoader加载插件包

源码位置:com.alibaba.nacos.plugin.datasource.MapperManager#loadInitial

nacos dameng 达梦数据源 插件开发_第9张图片

c. 根据配置的数据源类型,获取当前表的Mapper实现类

源码位置:com.alibaba.nacos.plugin.datasource.MapperManager#findMapper

nacos dameng 达梦数据源 插件开发_第10张图片

三、插件编写

具体源码见:https://gitee.com/tangjingshan/nacos

大致实现步骤如下:

1)新建一个项目,并实现xxxMapper接口

参考mysql的实现位置:com.alibaba.nacos.plugin.datasource.impl.mysql,去继承mysql的所有Mapper实现类extends xxxMapperByMySql implements ConfigInfoAggrMappernacos dameng 达梦数据源 插件开发_第11张图片

继承mysql的原因:

  • DM与mysql语法大致一样,后续即使升级nacos,可能也不需要更改插件包(因为xxxMapperByMySql已经实现了)
  • DM有特殊语法的话,重写父类方法即可

2)编写SPI配置文件

文件位置:/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mapper

nacos dameng 达梦数据源 插件开发_第12张图片

3)引入DM数据源驱动


    com.dameng
    DmJdbcDriver18
    ${dm-connector-java.version}
  

4)打包包含驱动依赖的jar包

nacos dameng 达梦数据源 插件开发_第13张图片

四、FAQ

1)如何启动nacos源码

nacos dameng 达梦数据源 插件开发_第14张图片

2)更改插件代码后,如何重新打包

nacos dameng 达梦数据源 插件开发_第15张图片

3)IDEA指定loader.path 无效

IDEA直接启动nacos不会用到org.springframework.boot.loader.PropertiesLauncher#main来启动程序,如果要支持,需要额外的配置,暂不深究

解压nacos-server.jar可以发现PropertiesLauncher才存在

nacos dameng 达梦数据源 插件开发_第16张图片

  • 如何调试本地插件模块

nacos dameng 达梦数据源 插件开发_第17张图片

4)windows本地启动nacos可能会报错

  • 报错截图nacos dameng 达梦数据源 插件开发_第18张图片
  • 解决

下载https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145并安装即可

你可能感兴趣的:(java,数据库,中间件)