0


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

在这里插入图片描述

1. 背景

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

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

2. PostgreSQL插件不可用的根因分析

在新版本中,或以往部分版本中,nacos组件总是不能在postgresql数据库下正常运行,这是为什么呢?

其实,nacos的postgresql插件默认情况下大部分功能是支持的!只有需要用到nacos配置中心去管理配置时,基于postgresql插件才不能正常创建配置,以及不能正常显示配置列表!

根本原因在于,当使用nacos配置中心在添加一个配置的时候,这条记录要保存一个创建时间,然后代码里面用到一个叫NOW(3) 的sql函数,因为nacos默认是以mysql为主要存储去开发的,mysql里是支持NOW(3) sql函数的。而其它数据库如postgresql等不支持带参数的now函数,致使postgresql无法正常运行。

NOW(3) sql函数的功能主要是用于获取一个带3位数的毫秒时间戳。即在数据库的timestamp字段里面存储的时间,除了年月日时分秒以外,还会带3位数毫秒时间戳

3. PostgreSQL插件适配源码修改

3.1 首先下载源码

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

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

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

3.2 用eclipse或idea打开

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

3.3 修改父工程的pom文件

如下图,进入父工程目录下,找到pom.xml文件。
在这里插入图片描述
将properties里面的alibaba-nacos.version从2.3.0改成2.4.0。这一步很关键,否则后面打包会失败!
在这里插入图片描述

3.4 新增枚举TrustedPostgreSqlFunctionEnum

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

packagecom.alibaba.nacos.plugin.datasource.enums;importjava.util.HashMap;importjava.util.Map;publicenumTrustedPostgreSqlFunctionEnum{/**
     * NOW().
     */NOW("NOW()","NOW()");privatestaticfinalMap<String,TrustedPostgreSqlFunctionEnum>LOOKUP_MAP=newHashMap<>();static{for(TrustedPostgreSqlFunctionEnum entry :TrustedPostgreSqlFunctionEnum.values()){LOOKUP_MAP.put(entry.functionName, entry);}}privatefinalString functionName;privatefinalString function;TrustedPostgreSqlFunctionEnum(String functionName,String function){this.functionName = functionName;this.function = function;}/**
     * Get the function name.
     *
     * @param functionName function name
     * @return function
     */publicstaticStringgetFunctionByName(String functionName){TrustedPostgreSqlFunctionEnum entry =LOOKUP_MAP.get(functionName);if(entry !=null){return entry.function;}thrownewIllegalArgumentException(String.format("Invalid function name: %s", functionName));}}

3.5 修改ConfigInfoMapperByPostgresql组件

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

publicclassConfigInfoMapperByPostgresqlextendsBaseConfigInfoMapper{/**
     * 解决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)
     */@OverridepublicStringgetFunction(String functionName){returnTrustedPostgreSqlFunctionEnum.getFunctionByName(functionName);}@OverridepublicStringgetDataSource(){returnDatabaseTypeConstant.POSTGRESQL;}}

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

publicStringgetFunction(String functionName){returnTrustedPostgreSqlFunctionEnum.getFunctionByName(functionName);}

在这里插入图片描述

4. PostgreSQL插件编译打包

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

5. PostgreSQL插件部署

将编译好的postgresql插件,拷贝到nacos的plugins目录下,如下图:
在这里插入图片描述
在这里插入图片描述

6. 总结

好了,以上就是关于nacos最新版本2.4.0支持posgresql数据的适配修改。按照以上方法一步步操作,最终会让nacos最新版2.4.0成功支持postgresql!!


本文转载自: https://blog.csdn.net/lilinhai548/article/details/140924213
版权归原作者 龙殿殿主 所有, 如有侵权,请联系我们删除。

“Nacos-2.4.0最新版本,postgresql插件适配器修改分享”的评论:

还没有评论