nacos适配达梦、人大金仓数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 准备工作 1、下载nacos源码、编译,官网更详细 https://nacos.io/zh-cn/docs/quick-start.html 2、下载源码,按官网更详细 git地址:https://g

准备工作

1、下载nacos源码、编译,官网更详细

https://nacos.io/zh-cn/docs/quick-start.html

2、下载源码,按官网更详细

git地址:https://github.com/alibaba/nacos.git

3、下载达梦、人大金仓数据库驱动

我下载的是:Dm、Kingbase依赖

dm: https://download.csdn.net/download/qq_24101357/20677620
kingbase: https://download.csdn.net/download/qq_24101357/20677646

修改nacos源码

引入达梦数据库驱动依赖

nacos-all的pom.xml

<!--达梦、人大金仓-->
<dm-connector-java.version>1.8</dm-connector-java.version>
<kingbase-connector-java.version>8.2.0</kingbase-connector-java.version>
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>Dm8JdbcDriver18</artifactId>
    <version>${dm-connector-java.version}</version>
</dependency>

<dependency>
    <groupId>com.kingbase</groupId>
    <artifactId>kingbase8</artifactId>
    <version>${kingbase-connector-java.version}</version>
</dependency>

nacos-config的pom.xml

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>Dm8JdbcDriver18</artifactId>
</dependency>

<dependency>
    <groupId>com.kingbase</groupId>
    <artifactId>kingbase8</artifactId>
</dependency>
修改数据库配置

nacos-console模块的application.properties:

主要修改了:

1、增加了驱动db.jdbcDriverName;

2、spring.datasource.platform=mysql,现在的意思其实是是否使用外置数据库,直接mysql就等于是使用外置数据库,使用什么数据库则由db.jdbcDriverName决定;

#*************** Config Module Related Configurations ***************#
#达梦
### If user MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1
db.jdbcDriverName=dm.jdbc.driver.DmDriver

### Connect URL of DB:
db.url.0=jdbc:dm://127.0.0.1:5236/NACOS?STU&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
db.user=root
db.password=root

#人大金仓
#spring.datasource.platform=mysql
#db.num=1
#db.jdbcDriverName=com.kingbase8.Driver
#db.url.0=jdbc:kingbase8://127.0.0.1:54321/nacos
#db.user.0=root
#db.password.0=root

#mysql
#spring.datasource.platform=mysql
#db.jdbcDriverName=com.mysql.cj.jdbc.Driver
#db.num=1
#db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
#db.user=root
#db.password=root
修改的程序

nacos-config模块

com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceProperties

其实就改了可以通过配置文件指定数据库驱动

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.alibaba.nacos.config.server.service.datasource;

import static com.alibaba.nacos.common.utils.CollectionUtils.getOrDefault;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.core.env.Environment;

import com.google.common.base.Preconditions;
import com.zaxxer.hikari.HikariDataSource;

/**
 * Properties of external DataSource
 *
 * @author Nacos
 */
public class ExternalDataSourceProperties{

    public static final long CONNECTION_TIMEOUT_MS = 3000L;
    public static final long VALIDATION_TIMEOUT = 10L;
    public static final String TEST_QUERY = "SELECT 1 FROM dual";
    public static final int DEFAULT_MAX_POOL_SIZE = 20;
    public static final int DEFAULT_MINIMUM_IDLE = 50;

    private Integer num;
    private List<String> url = new ArrayList<>();
    private List<String> user = new ArrayList<>();
    private List<String> password = new ArrayList<>();
    private List<Integer> maxPoolSize = new ArrayList<>();
    private List<Integer> minIdle = new ArrayList<>();

    /**
     * 数据库驱动
     * 增加对达梦、人大金仓数据库的支持
     */
    private String jdbcDriverName;

    public String getJdbcDriverName() {
        return jdbcDriverName;
    }

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

    public void setNum(Integer num) {
        this.num = num;
    }

    public void setUrl(List<String> url) {
        this.url = url;
    }

    public void setUser(List<String> user) {
        this.user = user;
    }

    public void setPassword(List<String> password) {
        this.password = password;
    }

    public void setMaxPoolSize(List<Integer> maxPoolSize) {
        this.maxPoolSize = maxPoolSize;
    }

    public void setMinIdle(List<Integer> minIdle) {
        this.minIdle = minIdle;
    }

    /**
     *
     * @param environment
     *            {@link Environment}
     * @param callback
     *            Callback function when constructing data source
     * @return List of {@link HikariDataSource}
     */
    List<HikariDataSource> build(Environment environment, Callback<HikariDataSource> callback) {
        List<HikariDataSource> dataSources = new ArrayList<>();
        Binder.get(environment).bind("db", Bindable.ofInstance(this));
        Preconditions.checkArgument(Objects.nonNull(num), "db.num is null");
        Preconditions.checkArgument(CollectionUtils.isNotEmpty(user), "db.user or db.user.[index] is null");
        Preconditions.checkArgument(CollectionUtils.isNotEmpty(password), "db.password or db.password.[index] is null");
        for (int index = 0; index < num; index++) {
            int currentSize = index + 1;
            Preconditions.checkArgument(url.size() >= currentSize, "db.url.%s is null", index);
            HikariDataSource ds = new HikariDataSource();
            
            // ds.setDriverClassName(JDBC_DRIVER_NAME)
            // 增加对达梦、人大金仓数据库的支持
            ds.setDriverClassName(jdbcDriverName);
            if(StringUtils.isNotEmpty(jdbcDriverName)){
                // 增加对达梦、人大金仓数据库的支持
                ds.setDriverClassName(jdbcDriverName);
            }else{
                //默认使用mysql驱动
                ds.setDriverClassName(JDBC_DRIVER_NAME);
            }

            ds.setJdbcUrl(url.get(index).trim());
            ds.setUsername(getOrDefault(user, index, user.get(0)).trim());
            ds.setPassword(getOrDefault(password, index, password.get(0)).trim());
            ds.setConnectionTimeout(CONNECTION_TIMEOUT_MS);
            ds.setMaximumPoolSize(getOrDefault(maxPoolSize, index, DEFAULT_MAX_POOL_SIZE));
            ds.setMinimumIdle(getOrDefault(minIdle, index, DEFAULT_MINIMUM_IDLE));
            // Check the connection pool every 10 minutes
            ds.setValidationTimeout(TimeUnit.MINUTES.toMillis(VALIDATION_TIMEOUT));
            ds.setConnectionTestQuery(TEST_QUERY);
            dataSources.add(ds);
            callback.accept(ds);
        }
        Preconditions.checkArgument(CollectionUtils.isNotEmpty(dataSources), "no datasource available");
        return dataSources;
    }

    interface Callback<DataSource> {
        /**
         *  Perform custom logic
         * @param dataSource
         */
        void accept(DataSource dataSource);
    }

}
重新编译、运行nacos

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

或:mvn -Prelease-nacos -Dmaven.test.skip=true -Drat.skip=true clean install -U

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

成功后,编译好的在这里
distribution\target\nacos-server-1.3.0\nacos\bin\startup.cmd

此时,nacos已支持达梦数据库,其实也支持oracle数据库,只要更换驱动就可以

(注:可以查看nacos文件夹,目录里面有一个BUILDING文件中说明)

关于nacos集群

集群和数据库没有关系,业务系统也不需要作任何改变

主要是以下步骤:

1、修改conf/cluster.conf文件,指定参与集群的3个nacos

192.168.4.128:8845
192.168.4.128:8846
192.168.4.128:8847

2、通过nginx代理nacos

upstream nacos {
server 192.168.4.128:8845;
server 192.168.4.128:8846;
server 192.168.4.128:8847;
}
server {
    listen       8848;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /nacos {
      proxy_pass http://nacos;
    }            

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
55 3
|
1月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
87 0
|
4月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
450 0
|
6月前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。
|
5月前
|
SQL 安全 关系型数据库
Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)
KingbaseES 是一款由中国人大金仓信息技术股份有限公司自主研发的通用关系型数据库管理系统(RDBMS),专为中国市场设计,广泛应用于政府、金融、能源、电信等多个关键行业。它是国产数据库的代表之一,以其高安全性、高可用性和高性能著称,符合中国信息技术领域的自主可控要求。以下是关于KingbaseES的一些关键特点和功能:
883 0
|
6月前
|
数据库连接 网络安全 Nacos
Nacos 的配置文件中修改了数据库的连接地址
Nacos 的配置文件中修改了数据库的连接地址
|
16天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
5月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
183 3
|
1月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
93 1
Nacos配置中心
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
48 5