Nacos适配达梦数据库

Nacos适配达梦数据库

这里适配了两个版本,分别是2.2.3和2.4.1

1、官网github仓库下载源码

https://github.com/alibaba/nacos,这里以下载2.2.3源码为例。如图:

在这里插入图片描述

2、下载DM8驱动依赖包

https://eco.dameng.com/document/dm/zh-cn/app-dev/java-MyBatis-Plus-frame.html
在这里插入图片描述
在这里插入图片描述

3、将DM8驱动依赖包引入本地maven仓库

mvn install:install-file -Dfile=jar包的位置 -DgroupId=com.dm -DartifactId=DmJdbcDriver18 -Dversion=1.8 -Dpackaging=jar

4、nacos-all 父工程的pom文件引入

<properties>
	<dm.version>1.8</dm.version>
</properties>
    
<dependencyManagement>
	<dependencies>
        <dependency>
            <groupId>com.dm</groupId>
            <artifactId>DmJdbcDriver18</artifactId>
            <version>${dm.version}</version>
        </dependency>
	</dependencies>
</dependencyManagement>

5、nacos-naming、nacos-common、nacos-config 子工程的pom文件引入

<dependencies>
    <dependency>
        <groupId>com.dm</groupId>
        <artifactId>DmJdbcDriver18</artifactId>
    </dependency>
</dependencies>

6、在nacos-plugin 工程下的nacos-datasource-plugin子工程中修改代码

constants包中的DataSourceConstant 类中增加

public static final String DM = "dm";

在这里插入图片描述

7、impl包中创建dm包

将mysql包中的所有类复制到dm包中,并将 ByMySql 改成 ByDm 的类名;在dm包下的所类中**getDataSource()**方法中的 DataSourceConstant.MYSQL 改成 DataSourceConstant.DM

在这里插入图片描述

8、修改在resource目录下 com.alibaba.nacos.plugin.datasource.mapper.Mapper 文件

com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoAggrMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoBetaMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoTagMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigTagsRelationMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.HistoryConfigInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.TenantInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.TenantCapacityMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.GroupCapacityMapperByDm

将上面这些路径加入到 com.alibaba.nacos.plugin.datasource.mapper.Mapper 文件中

在这里插入图片描述

9、修改nacos-config配置工程中的 ExternalDataSourceProperties 类

类路径:com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceProperties

增加 jdbcDriverName 属性

private List<String> jdbcDriverName = new ArrayList<>();

public void setJdbcDriverName(List<String> jdbcDriverName) {
    this.jdbcDriverName = jdbcDriverName;
}

public List<String> getJdbcDriverName() {
    return jdbcDriverName;
}

在这里插入图片描述

修改build方法

poolProperties.setDriverClassName(getOrDefault(jdbcDriverName, index, jdbcDriverName.get(0)).trim());

在这里插入图片描述

以上是naco-2.2.3版本适配达梦数据库的全过程。

注意:

以上过程在2.2.3版本中能够正常运行,但不能修改数据,发布时会提示违反唯一约束,不过,不用担心,是可以解决的;dm的唯一约束和Mysql的还是有点区别的,想要解决这个问题只需要修改 ExternalConfigInfoPersistServiceImpl 类中的 insertOrUpdate() 和 insertOrUpdateCas() 方法中的捕获异常类。将原来的捕获异常类 DuplicateKeyException 改成 DataIntegrityViolationException 类。

nacos-config——> com.alibaba.nacos.config.server.service.repository.extrnal

类路径:com.alibaba.nacos.config.server.service.repository.extrnal.ExternalConfigInfoPersistServiceImpl

在这里插入图片描述
在这里插入图片描述

10、mvn编译

mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true clean install -U

以上是 2.2.3 适配的全过程,而在2.4.1的版本中有些地方不同。那么下面说一下在2.4.1有哪些不同,相同点不在详细说明。

11、2.4.1 引入依赖

同上,分别在nacos-all、nacos-config、nacos-naming、nacos-common中的pom文件引入DM8 数据库驱动依赖包。

12、2.4.1 nacos-plugin中修改代码

12.1、增加静态属性

类路径:com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant

增加:public static final String DM = “dm”;

12.2、增加枚举类ENUM

不同点1:在2.4.1中使用了枚举类

创建 dm 枚举包,复制 MySql 的枚举类 并改名为 TrustedDmFunctionEnum

在这里插入图片描述

12.3、在impl包创建 dm 包

不同点2:Mapper有一个基础接口类 AbstractMapperByDm

创建 dm 包后,将 mysql 包下的所有复制到 dm 包中,将 ByMySql 修改为 ByDm,将类里面的getDataSource()方法中的 DataSourceConstant.MYSQL 改成 DataSourceConstant.DM
在这里插入图片描述

12.4、在resource路径下的 com.alibaba.nacos.plugin.datasource.mapper.Mapper 类增加Dm的路径

com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoAggrMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoBetaMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoTagMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigTagsRelationMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.HistoryConfigInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.TenantInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.TenantCapacityMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.GroupCapacityMapperByDm

在这里插入图片描述

13、2.4.1 修改nacos-persistence工程下的代码

不同点3:在2.2.3中是没有此工程的

修改 ExternalDataSourceProperties 类型

类路径:com.alibaba.nacos.persistence.datasource.ExternalDataSourceProperties

增加类属性:

private List<String> jdbcDriverName = new ArrayList<>();

public void setJdbcDriverName(List<String> jdbcDriverName) {
    this.jdbcDriverName = jdbcDriverName;
}

public List<String> getJdbcDriverName() {
    return jdbcDriverName;
}

在这里插入图片描述

14、2.4.1 增加DM分页适配器

复制 MysqlPageHandlerAdapter 分页适配器,改名为 DmPageHandlerAdapter

在这里插入图片描述

15、mvn打包

mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true clean install -U

16、修改配置文件

#*************** Spring Boot Related Configurations ***************#
### Default web context path: ????
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ALWAYS
### Default web server port: ??
server.port=8848

#*************** ????? ***************#
spring.sql.init.platform=dm
db.num=1
db.url.0=jdbc:dm://127.0.0.1:5236/nacos?schema=NACOS&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
db.user.0=SYSDBA
db.password.0=xxxxx

db.pool.config.driverClassName=dm.jdbc.driver.DmDriver
db.pool.config.connectionTestQuery=SELECT 1
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

#*************** ?????? ***************#
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos

nacos.core.auth.plugin.nacos.token.secret.key=xxxxxxxxx
nacos.core.auth.plugin.nacos.token.expire.seconds=18000

nacos.core.auth.server.identity.key=xxxxxxxxx
nacos.core.auth.server.identity.value=xxxxxxxxx

nacos.core.auth.config.encrypted=false
nacos.core.protocol.raft.enabled=false

nacos.core.auth.enable.userAgentAuthWhite=false

17、启动

startup.cmd -m standalone

也可以修改 startup.cmd 文件中 MODE 属性值,默认是cluster,改为standalone 单机模式

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珍朱(珠)奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值