nacos适配postgresql数据库

nacos适配postgresql数据库

准备工作
1、下载nacos源码、编译,官网更详细

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

2、下载若依微服务版,按官网更详细

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

修改nacos源码
引入postgresql数据库驱动依赖

nacos-all的pom.xml

<!--postgresql-->
<postgresql-connector-java.version>42.2.20</postgresql-connector-java.version>
<!--postgresql JDBC libs-->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>${postgresql-connector-java.version}</version>
</dependency>

nacos-config的pom.xml

<!--postgresql JDBC libs-->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

修改数据库配置

nacos-console模块的application.properties:

主要修改了:

1、增加了驱动db.jdbcDriverName;

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

#*************** Config Module Related Configurations ***************#
spring.datasource.platform=mysql

### Count of DB:
db.num=1
db.jdbcDriverName=org.postgresql.Driver
db.url.0=jdbc:postgresql://localhost:5432/nacos
db.user.0=postgres
db.password.0=postgres

修改的程序

nacos-config模块

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

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

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

    /**
    * 默认mysql驱动 
    */
    private static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
    /**
     * 数据库驱动
     * 增加对postgresql仓数据库的支持
     */
    private String jdbcDriverName;

    
    List<HikariDataSource> build(Environment environment, Callback<HikariDataSource> callback) {
        List<HikariDataSource> dataSources = new ArrayList<>();
        for (int index = 0; index < num; index++) {
            //**
            
            if(StringUtils.isNotEmpty(jdbcDriverName)){
                // 增加对达梦、人大金仓、postgresql数据库的支持
                poolProperties.setDriverClassName(jdbcDriverName);
            }else{
                //默认使用mysql驱动
                poolProperties.setDriverClassName(JDBC_DRIVER_NAME);
            }

            //***
        }
        Preconditions.checkArgument(CollectionUtils.isNotEmpty(dataSources), "no datasource available");
        return dataSources;
    }
}

2.com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl

处理新增配置文件时主键的返回,报异常的问题

1984行


//Number nu = keyHolder.getKey();  (注释)

//捕获InvalidDataAccessApiUsageException异常
Number nu = null;
try {
    nu = keyHolder.getKey();
}catch (InvalidDataAccessApiUsageException e){
    List<Map<String, Object>> keyList = keyHolder.getKeyList();
    if (keyList.size()>0){
        Iterator<Object> keyIter = keyList.get(0).values().iterator();
        if (keyIter.hasNext()) {
            Object key = keyIter.next();
            if (!(key instanceof Number)) {
                throw new DataRetrievalFailureException(
                    "The generated key is not of a supported numeric type. " +
                        "Unable to cast [" + (key != null ? key.getClass().getName() : null) +
                        "] to [" + Number.class.getName() + "]");
            }
            nu = (Number) key;
        }
    }
}

3.ExternalStoragePaginationHelperImpl.java

 selectSql = sqlFetchRows + " limit " + startRow + "," + pageSize;
// 修改为支持postgresql
selectSql = sqlFetchRows + " limit " + pageSize + " offset " + startRow;

4.利用工具全局搜索,将所有limit ?,? 替换为 offset ? limit ?

String sqlFetchRows = " SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5 "
        + " FROM (  SELECT id FROM config_info WHERE tenant_id like ? ORDER BY id offset ? limit ? )"
        + " g, config_info t  WHERE g.id = t.id ";

参考地址

重新编译、运行nacos

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

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

此时,nacos已支持postgresql数据库。

(注:可以查看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;
    }

}

本地nacos源码启动:
启动类:com.alibaba.nacos.Nacos
参数: -Dnacos.standalone=true

  • pg版本
    打包好的服务下载:(包含pg,nacos初始化sql脚本)
    nacos-pg
要将Docker与Nacos适配达梦数据库,我们可以采取以下步骤: 1. 在Docker中下载并安装Nacos镜像。可以使用Docker Hub上的官方Nacos镜像,该镜像提供了可用于适配不同数据库的配置选项。 2. 配置Nacos连接达梦数据库。编辑Nacos的配置文件nacos/conf/application.properties,在该文件中找到数据库相关配置项,如`spring.datasource.url`、`spring.datasource.username`、`spring.datasource.password`等,将其按照达梦数据库的连接信息进行相应修改。 3. 构建并启动Nacos容器。使用Docker命令行工具,执行类似以下命令来构建并启动Nacos容器: ``` docker run -d -p 8848:8848 --name nacos-server \ -e MODE=standalone \ -e MYSQL_SERVICE_HOST=<数据库主机地址> \ -e MYSQL_SERVICE_PORT=<数据库端口> \ -e MYSQL_SERVICE_DB_NAME=<数据库名称> \ -e MYSQL_SERVICE_USER=<数据库用户名> \ -e MYSQL_SERVICE_PASSWORD=<数据库密码> \ --restart=always \ nacos/nacos-server:latest ``` 替换<数据库主机地址>、<数据库端口>、<数据库名称>、<数据库用户名>、<数据库密码>为实际达梦数据库的信息。 4. 确认Nacos容器已成功启动。使用Docker命令行工具执行以下命令来查看容器状态: ``` docker ps ``` 如果容器状态为Up,则表示Nacos容器已成功运行。 5. 启动达梦数据库。确保达梦数据库已成功启动,并且Nacos容器可以连接到达梦数据库。可以使用数据库客户端验证连接信息是否正确。 6. 访问Nacos管理界面。在浏览器中输入Nacos容器所在主机的IP地址和端口号(默认为8848),访问Nacos的管理界面。在界面中可以配置和管理Nacos的服务、配置等。 通过以上步骤,我们可以在Docker中适配Nacos和达梦数据库实现服务注册和配置管理。这样,我们就可以使用Docker来构建和管理基于Nacos和达梦数据库的应用程序。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

llsydn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值