概述
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
成功后,编译好的在这里
distributiontargetnacos-server-1.4.2nacosbinstartup.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
最后
以上就是畅快小霸王为你收集整理的nacos适配postgresql数据库nacos适配postgresql数据库的全部内容,希望文章能够帮你解决nacos适配postgresql数据库nacos适配postgresql数据库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复