nacos使用postgresql做持久化
| 数据库
评论 0 | 点赞 0 | 浏览 1,199

Nacos使用postgresql做持久化

一、 拉取源码

从github拉取nacos源码,版本1.4.4

https://github.com/alibaba/nacos/releases/tag/1.4.4

二、修改配置文件

修改console模块中的application.properties配置文件

#*************** postgresql数据库的支持 ***************#
spring.datasource.platform=postgresql
db.num=1
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos_config
db.user.0=postgres
db.password.0=postgres
#*************** postgresql数据库的支持 ***************#

三、引入pg驱动

1.修改pom

nacos-all添加依赖

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.14</version>
</dependency>

naming模块中添加依赖

<dependency>
&nbsp; &nbsp; <groupId>org.postgresql</groupId>
&nbsp; &nbsp; &nbsp;<artifactId>postgresql</artifactId>
&nbsp;</dependency>

config模块中添加依赖

<dependency>
&nbsp; &nbsp; <groupId>org.postgresql</groupId>
&nbsp; &nbsp; &nbsp;<artifactId>postgresql</artifactId>
&nbsp;</dependency>
2.修改驱动加载相关类

ExternalDataSourceProperties.java

//源码
poolProperties.setDriverClassName(JDBC_DRIVER_NAME);

//修改为postgresql加载
String driverClassName = JDBC_DRIVER_NAME;
if("postgresql".equals(EnvUtil.getProperty("spring.datasource.platform"))){
    driverClassName = "org.postgresql.Driver";
}
poolProperties.setDriverClassName(driverClassName);

相关问提见:第九节 3.容器化部署报错

四、修改配置类

PropertyUtil.java

// 源码
// External data sources are used by default in cluster mode
setUseExternalDB("mysql".equalsIgnoreCase(getString("spring.datasource.platform", "")));

// 修改为支持postgresql
String platfrom = getString("spring.datasource.platform", "");
setUseExternalDB("mysql".equalsIgnoreCase(platfrom) || "postgresql".equalsIgnoreCase(platfrom));

StartingApplicationListener.java

// 源码
boolean useExternalStorage = ("mysql".equalsIgnoreCase(env.getProperty("spring.datasource.platform", "")));

// 修改为支持postgresql
String platform = env.getProperty("spring.datasource.platform", "");
boolean useExternalStorage = ("mysql".equalsIgnoreCase(platform) || "postgresql".equalsIgnoreCase(platform));

五、修改sql

修改获取返回主键ID,GroupCapacityPersistService.java、TenantCapacityPersistService.java、ExternalStoragePersistServiceImpl.java

// 源码
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

// 修改为支持postgresql
PreparedStatement ps = connection.prepareStatement(sql, new String[]{"id"});

ExternalStoragePaginationHelperImpl.java

// 源码
selectSql = sqlFetchRows + " limit " + startRow + "," + pageSize;

// 修改为支持postgresql
selectSql = sqlFetchRows + " limit " + pageSize + " offset " + startRow;

修改角色模糊查询ExternalRolePersistServiceImpl.java

@Override
public List<String> findRolesLikeRoleName(String role) {
  //        String sql = "SELECT role FROM roles WHERE role like '%' ? '%'";
  //        List<String> users = this.jt.queryForList(sql, new String[] {role}, String.class);
  //        return users;
&nbsp; &nbsp; String sql = "SELECT role FROM roles WHERE role like '%" + role + "%'";
&nbsp; &nbsp; List<String> users = this.jt.queryForList(sql, null, String.class);
&nbsp; &nbsp; return users;
}

修改用户模糊查询ExternalUserPersistServiceImpl.java

@Override
public List<String> findUserLikeUsername(String username) {
//        String sql = "SELECT username FROM users WHERE username like '%' ? '%'";
//        List<String> users = this.jt.queryForList(sql, new String[]{username}, String.class);
//        return users;
    String sql = "SELECT username FROM users WHERE username like '%" + username + "%'";
    List<String> users = this.jt.queryForList(sql, null, String.class);
    return users;
}

利用工具全局搜索,将所有limit ?,? 替换为 offset ? limit ?

ExternalStoragePersistServiceImpl.java

@Override
    public Page<ConfigInfoWrapper> findAllConfigInfoFragment(final long lastMaxId, final int pageSize) {
        String select = "SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type from config_info where id > ? order by id asc offset ? limit ?";
        PaginationHelper<ConfigInfoWrapper> helper = createPaginationHelper();
    @Override
    public Page<ConfigInfoAggr> findConfigInfoAggrByPage(String dataId, String group, String tenant, final int pageNo,
            final int pageSize) {
        String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
        String sqlCountRows = "SELECT COUNT(*) FROM config_info_aggr WHERE data_id = ? and group_id = ? and tenant_id = ?";
        String sqlFetchRows =
                "select data_id,group_id,tenant_id,datum_id,app_name,content from config_info_aggr where data_id=? and "
                        + "group_id=? and tenant_id=? order by datum_id offset ? limit ?";    

EmbeddedStoragePersistServiceImpl.java

    @Override
    public Page<ConfigInfoWrapper> findAllConfigInfoFragment(final long lastMaxId, final int pageSize) {
        String select =
                "SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type from config_info where id > ? "
                        + "order by id asc offset ? limit ?";
    @Override
    public Page<ConfigInfoAggr> findConfigInfoAggrByPage(String dataId, String group, String tenant, final int pageNo,
            final int pageSize) {
        String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
        String sqlCountRows = "SELECT COUNT(*) FROM config_info_aggr WHERE data_id = ? and group_id = ? and tenant_id = ?";
        String sqlFetchRows =
                "select data_id,group_id,tenant_id,datum_id,app_name,content from config_info_aggr where data_id=? and "
                        + "group_id=? and tenant_id=? order by datum_id offset ? limit ?";

六、 PG脚本

CREATE TABLE config_info (
     id serial  NOT NULL,
     data_id varchar(255) NOT NULL ,
     group_id varchar(255) DEFAULT NULL,
     content text NOT NULL ,
     md5 varchar(32) DEFAULT NULL ,
     gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00' ,
     gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00' ,
     src_user text ,
     src_ip varchar(20) DEFAULT NULL ,
     app_name varchar(128) DEFAULT NULL,
     tenant_id varchar(128) DEFAULT '' ,
     c_desc varchar(256) DEFAULT NULL,
     c_use varchar(64) DEFAULT NULL,
     effect varchar(64) DEFAULT NULL,
     type varchar(64) DEFAULT NULL,
     c_schema text,
     PRIMARY KEY (id),
     constraint uk_configinfo_datagrouptenant unique(data_id,group_id,tenant_id)
) ;

comment on table config_info is 'config_info';
comment on column config_info.id is 'id';
comment on column config_info.content is 'content';
comment on column config_info.md5 is 'md5';
comment on column config_info.gmt_create is '创建时间';
comment on column config_info.gmt_modified is '修改时间';
comment on column config_info.src_user is 'source user';
comment on column config_info.src_ip is 'source ip';
comment on column config_info.tenant_id is '租户字段';

CREATE TABLE config_info_aggr (
      id serial NOT NULL,
      data_id varchar(255) NOT NULL ,
      group_id varchar(255) NOT NULL ,
      datum_id varchar(255) NOT NULL ,
      content text NOT NULL ,
      gmt_modified timestamp NOT NULL ,
      app_name varchar(128) DEFAULT NULL,
      tenant_id varchar(128) DEFAULT '' ,
      PRIMARY KEY (id),
      constraint uk_configinfoaggr_datagrouptenantdatum unique(data_id,group_id,tenant_id,datum_id)
) ;

comment on table config_info_aggr is '增加租户字段';
comment on column config_info_aggr.id is 'id';
comment on column config_info_aggr.data_id is 'data_id';
comment on column config_info_aggr.group_id is 'group_id';
comment on column config_info_aggr.datum_id is 'datum_id';
comment on column config_info_aggr.content is '内容';
comment on column config_info_aggr.gmt_modified is '修改时间';
comment on column config_info_aggr.tenant_id is '租户字段';


CREATE TABLE config_info_beta (
      id serial NOT NULL,
      data_id varchar(255) NOT NULL ,
      group_id varchar(128) NOT NULL ,
      app_name varchar(128) DEFAULT NULL ,
      content text NOT NULL ,
      beta_ips varchar(1024) DEFAULT NULL ,
      md5 varchar(32) DEFAULT NULL ,
      gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
      gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
      src_user text ,
      src_ip varchar(20) DEFAULT NULL ,
      tenant_id varchar(128) DEFAULT '',
      PRIMARY KEY (id),
      constraint uk_configinfobeta_datagrouptenant unique(data_id,group_id,tenant_id)
);

comment on table config_info_beta is 'config_info_beta';
comment on column config_info_beta.id is 'id';
comment on column config_info_beta.data_id is 'data_id';
comment on column config_info_beta.group_id is 'group_id';
comment on column config_info_beta.app_name is 'app_name';
comment on column config_info_beta.content is 'content';
comment on column config_info_beta.beta_ips is 'betaIps';
comment on column config_info_beta.md5 is 'md5';
comment on column config_info_beta.gmt_create is '创建时间';
comment on column config_info_beta.gmt_modified is '修改时间';
comment on column config_info_beta.src_user is 'source user';
comment on column config_info_beta.src_ip is 'source ip';
comment on column config_info_beta.tenant_id is '租户字段';

CREATE TABLE config_info_tag (
     id serial NOT NULL,
     data_id varchar(255) NOT NULL ,
     group_id varchar(128) NOT NULL ,
     tenant_id varchar(128) DEFAULT '' ,
     tag_id varchar(128) NOT NULL ,
     app_name varchar(128) DEFAULT NULL,
     content text NOT NULL ,
     md5 varchar(32) DEFAULT NULL ,
     gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
     gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00' ,
     src_user text ,
     src_ip varchar(20) DEFAULT NULL ,
     PRIMARY KEY (id),
     constraint uk_configinfotag_datagrouptenanttag unique(data_id,group_id,tenant_id,tag_id)
) ;

comment on table config_info_tag is 'config_info_tag';
comment on column config_info_tag.id is 'id';
comment on column config_info_tag.data_id is 'data_id';
comment on column config_info_tag.group_id is 'group_id';
comment on column config_info_tag.tenant_id is 'tenant_id';
comment on column config_info_tag.tag_id is 'tag_id';
comment on column config_info_tag.app_name is 'app_name';
comment on column config_info_tag.content is 'content';
comment on column config_info_tag.md5 is 'md5';
comment on column config_info_tag.gmt_create is '创建时间';
comment on column config_info_tag.gmt_modified is '修改时间';
comment on column config_info_tag.src_user is 'source user';
comment on column config_info_tag.src_ip is 'source ip';
comment on column config_info_tag.tenant_id is '租户字段';

CREATE TABLE config_tags_relation (
          id bigint NOT NULL ,
          tag_name varchar(128) NOT NULL ,
          tag_type varchar(64) DEFAULT NULL ,
          data_id varchar(255) NOT NULL ,
          group_id varchar(128) NOT NULL ,
          tenant_id varchar(128) DEFAULT '' ,
          nid serial NOT NULL,
          PRIMARY KEY (nid),
          constraint uk_configtagrelation_configidtag unique(id,tag_name,tag_type)
) ;

comment on table config_tags_relation is 'config_tag_relation';
comment on column config_tags_relation.id is 'id';
comment on column config_tags_relation.tag_name is 'tag_name';
comment on column config_tags_relation.tag_type is 'tag_type';
comment on column config_tags_relation.data_id is 'data_id';
comment on column config_tags_relation.group_id is 'group_id';
comment on column config_tags_relation.tenant_id is 'tenant_id';


CREATE TABLE group_capacity (
    id serial NOT NULL ,
    group_id varchar(128) NOT NULL DEFAULT '',
    quota int  NOT NULL DEFAULT '0' CHECK (quota >= 0) ,
    usage int  NOT NULL DEFAULT '0' CHECK (usage >= 0),
    max_size int  NOT NULL DEFAULT '0' CHECK (max_size >= 0),
    max_aggr_count int  NOT NULL DEFAULT '0' CHECK (max_aggr_count >= 0),
    max_aggr_size int  NOT NULL DEFAULT '0' CHECK (max_aggr_size >= 0),
    max_history_count int  NOT NULL DEFAULT '0' CHECK (max_history_count >= 0),
    gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00' ,
    gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00' ,
    PRIMARY KEY (id),
    constraint uk_group_id unique(group_id)
) ;

comment on table group_capacity is '集群、各Group容量信息表';
comment on column group_capacity.id is '主键ID';
comment on column group_capacity.group_id is 'Group ID,空字符表示整个集群';
comment on column group_capacity.quota is '配额,0表示使用默认值';
comment on column group_capacity.usage is '使用量';
comment on column group_capacity.max_size is '单个配置大小上限,单位为字节,0表示使用默认值';
comment on column group_capacity.max_aggr_count is '聚合子配置最大个数,,0表示使用默认值';
comment on column group_capacity.max_aggr_size is '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';
comment on column group_capacity.max_history_count is '最大变更历史数量';
comment on column group_capacity.gmt_create is '创建时间';
comment on column group_capacity.gmt_modified is '修改时间';

CREATE TABLE his_config_info (
     id bigint  NOT NULL CHECK (id >= 0),
     nid serial  NOT NULL CHECK (nid >= 0),
     data_id varchar(255) NOT NULL ,
     group_id varchar(128) NOT NULL,
     app_name varchar(128) DEFAULT NULL ,
     content text NOT NULL,
     md5 varchar(32) DEFAULT NULL,
     gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
     gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
     src_user text,
     src_ip varchar(20) DEFAULT NULL,
     op_type char(10) DEFAULT NULL,
     tenant_id varchar(128) DEFAULT '' ,
     PRIMARY KEY (nid)
);

comment on table his_config_info is '多租户改造';
comment on column his_config_info.app_name is 'app_name';
comment on column his_config_info.tenant_id is '租户字段';


CREATE TABLE tenant_capacity (
    id serial NOT NULL CHECK (id >= 0),
    tenant_id varchar(128) NOT NULL DEFAULT '',
    quota int  NOT NULL DEFAULT '0' CHECK (quota >= 0),
    usage int  NOT NULL DEFAULT '0' CHECK (usage >= 0),
    max_size int  NOT NULL DEFAULT '0' CHECK (max_size >= 0),
    max_aggr_count int  NOT NULL DEFAULT '0' CHECK (max_aggr_count >= 0),
    max_aggr_size int  NOT NULL DEFAULT '0' CHECK (max_aggr_size >= 0),
    max_history_count int  NOT NULL DEFAULT '0' CHECK (max_history_count >= 0),
    gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
    gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00' ,
    PRIMARY KEY (id),
    constraint uk_tenant_id unique(tenant_id)
);

comment on table tenant_capacity is '租户容量信息表';
comment on column tenant_capacity.id is '主键ID';
comment on column tenant_capacity.tenant_id is 'Tenant ID';
comment on column tenant_capacity.quota is '配额,0表示使用默认值';
comment on column tenant_capacity.usage is '使用量';
comment on column tenant_capacity.max_size is '单个配置大小上限,单位为字节,0表示使用默认值';
comment on column tenant_capacity.max_aggr_count is '聚合子配置最大个数';
comment on column tenant_capacity.max_aggr_size is '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';
comment on column tenant_capacity.max_history_count is '最大变更历史数量';
comment on column tenant_capacity.gmt_create is '创建时间';
comment on column tenant_capacity.gmt_modified is '修改时间';


CREATE TABLE tenant_info (
     id serial NOT NULL ,
     kp varchar(128) NOT NULL,
     tenant_id varchar(128) default '' ,
     tenant_name varchar(128) default '' ,
     tenant_desc varchar(256) DEFAULT NULL ,
     create_source varchar(32) DEFAULT NULL ,
     gmt_create bigint NOT NULL,
     gmt_modified bigint NOT NULL ,
     PRIMARY KEY (id),
     constraint uk_tenant_info_kptenantid unique(kp,tenant_id)
);

comment on table tenant_info is 'tenant_info';
comment on column tenant_info.id is 'id';
comment on column tenant_info.kp is 'kp';
comment on column tenant_info.tenant_id is 'tenant_id';
comment on column tenant_info.tenant_name is 'tenant_name';
comment on column tenant_info.tenant_desc is 'tenant_desc';
comment on column tenant_info.create_source is 'create_source';
comment on column tenant_info.gmt_create is '创建时间';
comment on column tenant_info.gmt_modified is '修改时间';

CREATE TABLE users (
   username varchar(50) NOT NULL PRIMARY KEY,
   password varchar(500) NOT NULL,
   enabled boolean NOT NULL
);

CREATE TABLE roles (
   username varchar(50) NOT NULL,
   role varchar(50) NOT NULL
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

七、源码打包

mvn -Prelease-nacos '-Dmaven.test.skip=true' '-Dpmd.skip=true' '-Dcheckstyle.skip=true' '-Drat.skip=true' clean install -U

跳过编码检查和测试

位置  distribution/target

八、源码启动

1.初始化数据源

创建数据库nacos(随意配置)

执行PG脚本初始化数据

修改distribution/conf/路径下的application.properties文件中的数据库连接部分(如下配置)

### If use PG as datasource:
spring.datasource.platform=postgresql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:postgresql://ntgcrm4pgqa01:5432/nacos
db.user.0=user1
db.password.0=i*ok92dRHAVqXi2w
2. 配置启动参数

启动nacos-console

配置启动参数为:

-Dnacos.standalone=true 单机模式启动

-Dnacos.home=D:\Gitee\nacos-1.4.4.tar\nacos-1.4.4\nacos-1.4.4\distribution 源码中distribution文件夹的位置

访问地址:http://localhost:8848/nacos/

九、问题

1.编译报错

找不到com.alibaba.nacos.consistency.entity.*包;

解决:mvn compile 目标包是由protobuf在编译时自动生成的

2.打包报错
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.0.1:repackage (default) on project nacos-console: Execution default of goal org.springframework.boot:spring-boot-maven-plug
in:3.0.1:repackage failed: Unable to load the mojo 'repackage' in the plugin 'org.springframework.boot:spring-boot-maven-plugin:3.0.1' due to an API incompatibility: org.codehaus.plexus.component.repository
.exception.ComponentLookupException: org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime o
nly recognizes class file versions up to 52.0
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.springframework.boot:spring-boot-maven-plugin:3.0.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/D:/MAVEN/repo/org/springframework/boot/spring-boot-maven-plugin/3.0.1/spring-boot-maven-plugin-3.0.1.jar
[ERROR] urls[1] = file:/D:/MAVEN/repo/org/springframework/spring-context/6.0.3/spring-context-6.0.3.jar
[ERROR] urls[2] = file:/D:/MAVEN/repo/org/springframework/spring-aop/6.0.3/spring-aop-6.0.3.jar
[ERROR] urls[3] = file:/D:/MAVEN/repo/org/springframework/spring-beans/6.0.3/spring-beans-6.0.3.jar
[ERROR] urls[4] = file:/D:/MAVEN/repo/org/springframework/spring-core/6.0.3/spring-core-6.0.3.jar
[ERROR] urls[5] = file:/D:/MAVEN/repo/org/springframework/spring-jcl/6.0.3/spring-jcl-6.0.3.jar
[ERROR] urls[6] = file:/D:/MAVEN/repo/org/springframework/spring-expression/6.0.3/spring-expression-6.0.3.jar
[ERROR] urls[7] = file:/D:/MAVEN/repo/org/springframework/boot/spring-boot-buildpack-platform/3.0.1/spring-boot-buildpack-platform-3.0.1.jar
[ERROR] urls[8] = file:/D:/MAVEN/repo/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.jar
[ERROR] urls[9] = file:/D:/MAVEN/repo/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.jar
[ERROR] urls[10] = file:/D:/MAVEN/repo/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.jar
[ERROR] urls[11] = file:/D:/MAVEN/repo/com/fasterxml/jackson/module/jackson-module-parameter-names/2.14.1/jackson-module-parameter-names-2.14.1.jar
[ERROR] urls[12] = file:/D:/MAVEN/repo/net/java/dev/jna/jna-platform/5.7.0/jna-platform-5.7.0.jar
[ERROR] urls[13] = file:/D:/MAVEN/repo/net/java/dev/jna/jna/5.7.0/jna-5.7.0.jar
[ERROR] urls[14] = file:/D:/MAVEN/repo/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar
[ERROR] urls[15] = file:/D:/MAVEN/repo/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar
[ERROR] urls[16] = file:/D:/MAVEN/repo/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar
[ERROR] urls[17] = file:/D:/MAVEN/repo/commons-codec/commons-codec/1.11/commons-codec-1.11.jar
[ERROR] urls[18] = file:/D:/MAVEN/repo/org/tomlj/tomlj/1.0.0/tomlj-1.0.0.jar
[ERROR] urls[19] = file:/D:/MAVEN/repo/org/antlr/antlr4-runtime/4.7.2/antlr4-runtime-4.7.2.jar
[ERROR] urls[20] = file:/D:/MAVEN/repo/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar
[ERROR] urls[21] = file:/D:/MAVEN/repo/org/springframework/boot/spring-boot-loader-tools/3.0.1/spring-boot-loader-tools-3.0.1.jar
[ERROR] urls[22] = file:/D:/MAVEN/repo/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar
[ERROR] urls[23] = file:/D:/MAVEN/repo/org/codehaus/plexus/plexus-utils/1.5.8/plexus-utils-1.5.8.jar
[ERROR] urls[24] = file:/D:/MAVEN/repo/org/apache/maven/plugins/maven-shade-plugin/3.2.4/maven-shade-plugin-3.2.4.jar
[ERROR] urls[25] = file:/D:/MAVEN/repo/org/sonatype/sisu/sisu-inject-bean/1.4.2/sisu-inject-bean-1.4.2.jar
[ERROR] urls[26] = file:/D:/MAVEN/repo/org/sonatype/sisu/sisu-guice/2.1.7/sisu-guice-2.1.7-noaop.jar
[ERROR] urls[27] = file:/D:/MAVEN/repo/org/sonatype/aether/aether-util/1.7/aether-util-1.7.jar
[ERROR] urls[28] = file:/D:/MAVEN/repo/org/codehaus/plexus/plexus-interpolation/1.14/plexus-interpolation-1.14.jar
[ERROR] urls[29] = file:/D:/MAVEN/repo/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
[ERROR] urls[30] = file:/D:/MAVEN/repo/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
[ERROR] urls[31] = file:/D:/MAVEN/repo/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[32] = file:/D:/MAVEN/repo/org/apache/maven/shared/maven-artifact-transfer/0.12.0/maven-artifact-transfer-0.12.0.jar
[ERROR] urls[33] = file:/D:/MAVEN/repo/org/apache/maven/shared/maven-common-artifact-filters/3.0.1/maven-common-artifact-filters-3.0.1.jar
[ERROR] urls[34] = file:/D:/MAVEN/repo/org/apache/maven/shared/maven-shared-utils/3.1.0/maven-shared-utils-3.1.0.jar
[ERROR] urls[35] = file:/D:/MAVEN/repo/org/ow2/asm/asm/8.0/asm-8.0.jar
[ERROR] urls[36] = file:/D:/MAVEN/repo/org/ow2/asm/asm-commons/8.0/asm-commons-8.0.jar
[ERROR] urls[37] = file:/D:/MAVEN/repo/org/ow2/asm/asm-tree/8.0/asm-tree-8.0.jar
[ERROR] urls[38] = file:/D:/MAVEN/repo/org/ow2/asm/asm-analysis/8.0/asm-analysis-8.0.jar
[ERROR] urls[39] = file:/D:/MAVEN/repo/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar
[ERROR] urls[40] = file:/D:/MAVEN/repo/org/apache/maven/shared/maven-dependency-tree/3.0.1/maven-dependency-tree-3.0.1.jar
[ERROR] urls[41] = file:/D:/MAVEN/repo/org/eclipse/aether/aether-util/0.9.0.M2/aether-util-0.9.0.M2.jar
[ERROR] urls[42] = file:/D:/MAVEN/repo/commons-io/commons-io/2.6/commons-io-2.6.jar
[ERROR] urls[43] = file:/D:/MAVEN/repo/org/vafer/jdependency/2.4.0/jdependency-2.4.0.jar
[ERROR] urls[44] = file:/D:/MAVEN/repo/org/ow2/asm/asm-util/8.0/asm-util-8.0.jar
[ERROR] urls[45] = file:/D:/MAVEN/repo/com/google/guava/guava/28.2-android/guava-28.2-android.jar
[ERROR] urls[46] = file:/D:/MAVEN/repo/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar
[ERROR] urls[47] = file:/D:/MAVEN/repo/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
[ERROR] urls[48] = file:/D:/MAVEN/repo/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar
[ERROR] urls[49] = file:/D:/MAVEN/repo/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar
[ERROR] urls[50] = file:/D:/MAVEN/repo/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar
[ERROR] urls[51] = file:/D:/MAVEN/repo/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]

解决: 插件版本过高,降低插件版本为2.6.4

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.6.4</version>
</plugin>
3.容器化部署报错
错误信息
...
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
        at com.alibaba.nacos.config.server.service.datasource.DynamicDataSource.getDataSource(DynamicDataSource.java:58)
        at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.init(ExternalStoragePersistServiceImpl.java:137)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
        ... 163 common frames omitted
Caused by: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
        at com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceServiceImpl.init(ExternalDataSourceServiceImpl.java:112)
        at com.alibaba.nacos.config.server.service.datasource.DynamicDataSource.getDataSource(DynamicDataSource.java:53)
        ... 171 common frames omitted
...

报错原因:切换pg后驱动切换失败 见第三节 2.修改驱动加载相关类

解决方案:源码中驱动是直接写死的mysql 这边直接暴力解决更换成pg

//源码
//private static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";

//修改
private static final String JDBC_DRIVER_NAME = "org.postgresql.Driver";
本文作者:不是好驴
本文链接:https://www.baddonkey.cn/detail/38
版权声明:原创文章,允许转载,转载请注明出处

高谈阔论

留言列表