irpas技术客

nacos适配postgresql数据库_llsydn_nacos postgre

网络 7185

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #nacos #postgre