Nacos 官方仅支持 MySQL,故需要自己魔改一下。
源码下载地址:
官网教程地址:
https://nacos.io/zh-cn/docs/qui
nacos-all中添加依赖
- <dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>42.2.20</version>
- </dependency>
nacos-config下的pom.xml
- <!--postgresql libs-->
- <dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>postgresql</artifactId>
- </dependency>
nacos-consloe下的application.properties
- # 是否使用外置数据库,直接mysql就等于是使用外置数据库,使用什么数据库则由db.jdbcDriverName决定
- 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
可通过配置文件指定数据库驱动。
类中新增对应配置文件中的字段和set方法。
- private String jdbcDriverName;
-
- public void setJdbcDriverName(String jdbcDriverName) {
- this.jdbcDriverName = jdbcDriverName;
- }
对List
- List<HikariDataSource> build(Environment environment, Callback<HikariDataSource> callback) {
- // ...
- for (int index = 0; index < num; index++) {
- // ...
- if (StringUtils.isNotEmpty(jdbcDriverName)) {
- // 增加对postgresql数据库的支持
- poolProperties.setDriverClassName(jdbcDriverName);
- } else {
- // 默认使用mysql驱动
- poolProperties.setDriverClassName(JDBC_DRIVER_NAME);
- }
- // ...
- }
- // ...
- }
修改addConfigInfoAtomic方法。

- public long addConfigInfoAtomic(final long configId, final String srcIp, final String srcUser,
- final ConfigInfo configInfo, final Timestamp time, Map<String, Object> configAdvanceInfo) {
- // 2057行
-
-
- // 2099行,注释掉Number nu = keyHolder.getKey();,更换为以下内容
- // 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;
- }
- }
- }
- // ...
- }
修改fetchPage方法。 代码在 96 行。
- // selectSql = sqlFetchRows + " LIMIT " + startRow + "," + pageSize;
- // 修改为支持postgresql
- selectSql = sqlFetchRows + " limit " + pageSize + " offset " + startRow;
利用工具进行全局替换,将所有limit ?,? 替换为 offset ? limit ?。兼容 mysql 和 postgresql

启动类:com.alibaba.nacos.Nacos
单机启动需配参数:-Dnacos.standalone=true

编译命令:
mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true -Drat.skip=true clean install -U
成功后,编译好的文件路径:
nacos-all\distribution\target...

此时,nacos 已支持 postgresql 数据库。
单机启动命令:
sh startup.sh -m standalone