Nacos-2.4.0最新版本,postgresql插件适配器修改分享

1. 背景

自前段时间,发表的一篇博文“Nacos-2.4.0最新版本docker镜像,兼容postgresql最新版本17和16

有网友在评论区叫我出个修改源码的过程,今天就给大家简单分享一下关于“Nacos最新版(2.4.0)的postgresql插件适配修改方法
在这里插入图片描述

2. Nacos最新版(2.4.0)的postgresql插件适配修改

2.1 首先下载源码

Nacos最新版(2.4.0)的postgresql插件源码地址(注意分支选择,根据更新时间判断,一定要选择最新分支):

https://github.com/nacos-group/nacos-plugin.git

下载下来后,目录结构如下:
在这里插入图片描述

2.2 用eclipse或idea打开

打开工程后,我们进入datasource插件目录,找到我们需要修改的postgresql数据库插件,只需要新增一个enum文件以及修改一个类即可完成Nacos最新版的postgresql插件正常适配。
在这里插入图片描述

2.3 新增枚举TrustedPostgreSqlFunctionEnum

将新增的枚举放入enums包下,该枚举主要是用于覆盖mysql的NOW(3)函数,因为该函数只有mysql才支持,postgresql等数据库不支持,因此需要去掉NOW(3)函数中的参数,如下所示:

package com.alibaba.nacos.plugin.datasource.enums;

import java.util.HashMap;
import java.util.Map;

/**
 * The TrustedSqlFunctionEnum enum class is used to enumerate and manage a list of trusted built-in SQL functions.
 * By using this enum, you can verify whether a given SQL function is part of the trusted functions list
 * to avoid potential SQL injection risks.
 *
 * @author blake.qiu
 */
public enum TrustedPostgreSqlFunctionEnum {

    /**
     * NOW().
     */
    NOW("NOW()", "NOW()");

    private static final Map<String, TrustedPostgreSqlFunctionEnum> LOOKUP_MAP = new HashMap<>();

    static {
        for (TrustedPostgreSqlFunctionEnum entry : TrustedPostgreSqlFunctionEnum.values()) {
            LOOKUP_MAP.put(entry.functionName, entry);
        }
    }

    private final String functionName;

    private final String function;

    TrustedPostgreSqlFunctionEnum(String functionName, String function) {
        this.functionName = functionName;
        this.function = function;
    }

    /**
     * Get the function name.
     *
     * @param functionName function name
     * @return function
     */
    public static String getFunctionByName(String functionName) {
        TrustedPostgreSqlFunctionEnum entry = LOOKUP_MAP.get(functionName);
        if (entry != null) {
            return entry.function;
        }
        throw new IllegalArgumentException(String.format("Invalid function name: %s", functionName));
    }
}

2.4 修改ConfigInfoMapperByPostgresql组件

在该类中新增一个构造函数即可,如下所示:

public class ConfigInfoMapperByPostgresql extends BaseConfigInfoMapper {
    
    /**
     * 解决NOW(integer)错误问题
     * @author sinhy
     * @since 2024-07-23 00:00 
     * @param functionName
     * @return
     * @see com.alibaba.nacos.plugin.datasource.impl.mysql.AbstractMapperByMysql#getFunction(java.lang.String)
     */
    @Override
    public String getFunction(String functionName)
    {
        return TrustedPostgreSqlFunctionEnum.getFunctionByName(functionName);
    }
    
    @Override
    public String getDataSource() {
        return DatabaseTypeConstant.POSTGRESQL;
    }
    
}

从源码历史更新对比可以看到,的确只新增了一个构造函数,如下图红色框所示:

    public String getFunction(String functionName)
    {
        return TrustedPostgreSqlFunctionEnum.getFunctionByName(functionName);
    }

在这里插入图片描述

3. 编译打包

右键子工程“nacos-postgresql-datasource-plugin-ext”使用maven的打包命令clean install,会在target输出jar包
在这里插入图片描述

4. 部署

将编译好的postgresql插件,拷贝到nacos的plugins目录下,如下图:
在这里插入图片描述
在这里插入图片描述
好了,以上就是关于nacos最新版本2.4.0支持posgresql数据的适配修改。按照以上方法一步步操作,最终会让nacos最新版2.4.0成功支持postgresql!!

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙殿殿主

你的打赏是我精心创作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值