Nacos2.4.0兼容达梦数据库

news2024/9/21 22:42:28

这段时间公司在搞国产化,发现当前的nacos版本只支持MySQL和derby数据库,后来翻看官方文档以后,官方文档说2.2以后支持达梦数据库了,但是需要插件。
在这里插入图片描述
按照他的思路再结合其他资料,我们开始搞起来!

一、下载源码

GitHub仓库源码:nacos
我们直接用最新版,以官网的2.4.0稳定版入手。

选择2.4.0版本
在这里插入图片描述
下载压缩包
在这里插入图片描述
解压压缩包,并用IDEA打开。

在这里插入图片描述

二、编译代码

建议把test取消掉。
在这里插入图片描述
如果出现这个报错,那就找到这个报错的包,compile一下,哪个包报错,就compile哪个包就行。
在这里插入图片描述
在这里插入图片描述
解决完报错后,启动Nacos。

三、启动Nacos

启动nacos在nacos-console包下。
在这里插入图片描述
如果因为是集群模式报错,修改IDEA启动命令
在这里插入图片描述
在这里插入图片描述
添加-Dnacos.standalone=true命令,保存重新启动就可以了。

四、适配多数据源

官方文档是去Nacos插件仓库找插件,但是我下载下来以后,不太适配,可能是我没搞明白,我直接把源码的mysql数据库复制了一份,改了改用着也没问题。
要是想跟着官方文档来弄也可以,我把链接放到下面,这里就不按照官方文档的方法做了。

Nacos插件仓库地址:Nacos插件仓库

多数据源的代码要写到nacos-plugin/nacos-datasource-plugin项目下。

在这里插入图片描述

添加数据源类型,在DataSourceConstant类
在这里插入图片描述

增加达梦适配的Mapper
在这里插入图片描述
直接把mysql里的所有类复制到dm的文件夹内,然后把ByMySql替换为ByDm。
把每个类的如下代码:

	@Override
    public String getDataSource() {
        return DataSourceConstant.MYSQL;
    }

替换成:

	@Override
    public String getDataSource() {
        return DataSourceConstant.DM;
    }

修改resource/META-INF.services配置
文件位置:
src\main\resources\META-INF\services\com.alibaba.nacos.plugin.datasource.mapper.Mapper
添加如下内容:
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoAggrMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoBetaMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigInfoTagMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.ConfigTagsRelationMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.HistoryConfigInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.TenantInfoMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.TenantCapacityMapperByDm
com.alibaba.nacos.plugin.datasource.impl.dm.GroupCapacityMapperByDm

在这里插入图片描述

添加达梦pom依赖
这个pom依赖最好是你下载的哪个版本的达梦,从达梦里面去粘贴达梦的jar包名称

在父级的pom里引入达梦依赖


			<properties>
				<dm.version>1.8.0</dm.version>
			</properties>
			<!--达梦数据库-->
            <dependency>
                <groupId>com.dm</groupId>
                <artifactId>DmJdbcDriver</artifactId>
                <version>${dm.version}</version>
            </dependency>

在nacos-console 和 nacos-naming 下引用依赖

			<!--达梦数据库-->
            <dependency>
                <groupId>com.dm</groupId>
                <artifactId>DmJdbcDriver</artifactId>
            </dependency>

修改ExternalDataSourceProperties类

private String jdbcDriverName;

    public String getJdbcDriverName() {
        return jdbcDriverName;
    }

    public void setJdbcDriverName(String jdbcDriverName) {
        this.jdbcDriverName = jdbcDriverName;
    }

 if(StringUtils.isEmpty(jdbcDriverName)) {
         //使用默认驱动
          poolProperties.setDriverClassName(JDBC_DRIVER_NAME);
 } else {
         //使用自己指定数据驱动
         poolProperties.setDriverClassName(jdbcDriverName);
}

最终代码

/*
* Copyright 1999-2023 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.alibaba.nacos.persistence.datasource;

import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.Preconditions;
import com.alibaba.nacos.common.utils.StringUtils;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.core.env.Environment;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import static com.alibaba.nacos.common.utils.CollectionUtils.getOrDefault;

/**
* Properties of external DataSource.
*
* @author Nacos
*/
public class ExternalDataSourceProperties {

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

   private String jdbcDriverName;

   private static final String TEST_QUERY = "SELECT 1";

   private Integer num;

   private List<String> url = new ArrayList<>();

   private List<String> user = new ArrayList<>();

   private List<String> password = new ArrayList<>();


   public void setNum(Integer num) {
       this.num = num;
   }

   public void setUrl(List<String> url) {
       this.url = url;
   }

   public void setUser(List<String> user) {
       this.user = user;
   }

   public void setPassword(List<String> password) {
       this.password = password;
   }

   public String getJdbcDriverName() {
       return jdbcDriverName;
   }

   public void setJdbcDriverName(String jdbcDriverName) {
       this.jdbcDriverName = jdbcDriverName;
   }

   /**
    * Build serveral HikariDataSource.
    *
    * @param environment {@link Environment}
    * @param callback    Callback function when constructing data source
    * @return List of {@link HikariDataSource}
    */
   List<HikariDataSource> build(Environment environment, Callback<HikariDataSource> callback) {
       List<HikariDataSource> dataSources = new ArrayList<>();
       Binder.get(environment).bind("db", Bindable.ofInstance(this));
       Preconditions.checkArgument(Objects.nonNull(num), "db.num is null");
       Preconditions.checkArgument(CollectionUtils.isNotEmpty(user), "db.user or db.user.[index] is null");
       Preconditions.checkArgument(CollectionUtils.isNotEmpty(password), "db.password or db.password.[index] is null");
       for (int index = 0; index < num; index++) {
           int currentSize = index + 1;
           Preconditions.checkArgument(url.size() >= currentSize, "db.url.%s is null", index);
           DataSourcePoolProperties poolProperties = DataSourcePoolProperties.build(environment);
           if (StringUtils.isEmpty(poolProperties.getDataSource().getDriverClassName())) {
               if(StringUtils.isEmpty(jdbcDriverName)) {
                   //使用默认驱动
                   poolProperties.setDriverClassName(JDBC_DRIVER_NAME);
               } else {
                   //使用自己指定数据驱动
                   poolProperties.setDriverClassName(jdbcDriverName);
               }

           }
           poolProperties.setJdbcUrl(url.get(index).trim());
           poolProperties.setUsername(getOrDefault(user, index, user.get(0)).trim());
           poolProperties.setPassword(getOrDefault(password, index, password.get(0)).trim());
           HikariDataSource ds = poolProperties.getDataSource();
           if (StringUtils.isEmpty(ds.getConnectionTestQuery())) {
               ds.setConnectionTestQuery(TEST_QUERY);
           }

           dataSources.add(ds);
           callback.accept(ds);
       }
       Preconditions.checkArgument(CollectionUtils.isNotEmpty(dataSources), "no datasource available");
       return dataSources;
   }


   interface Callback<D> {

       /**
        * Perform custom logic.
        *
        * @param datasource dataSource.
        */
       void accept(D datasource);
   }
}

这样就可以了,配置一下配置文件的数据源就可以了。

五、配置数据源

配置文件在nacos-console\src\main\resources\application.properties
在这里插入图片描述
spring.datasource.platform你的数据源是啥就写啥。

db.jdbcDriverName是咱们自己定义的,是驱动。

六、Nacos达梦数据库表

CREATE TABLE "NACOS"."USERS"
(
    "USERNAME" VARCHAR(50)  NOT NULL,
    "PASSWORD" VARCHAR(500) NOT NULL,
    "ENABLED"  TINYINT      NOT NULL
);
CREATE TABLE "NACOS"."TENANT_INFO"
(
    "ID"            BIGINT IDENTITY(1,1) NOT NULL,
    "KP"            VARCHAR(128) NOT NULL,
    "TENANT_ID"     VARCHAR(128) DEFAULT ''
        NULL,
    "TENANT_NAME"   VARCHAR(128) DEFAULT ''
        NULL,
    "TENANT_DESC"   VARCHAR(256) NULL,
    "CREATE_SOURCE" VARCHAR(32) NULL,
    "GMT_CREATE"    BIGINT       NOT NULL,
    "GMT_MODIFIED"  BIGINT       NOT NULL
);
CREATE TABLE "NACOS"."TENANT_CAPACITY"
(
    "ID"                BIGINT IDENTITY(1,1) NOT NULL,
    "TENANT_ID"         VARCHAR(128) DEFAULT ''
        NOT NULL,
    "QUOTA"             BIGINT       DEFAULT 0
        NOT NULL,
    "USAGE"             BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_SIZE"          BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_AGGR_COUNT"    BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_AGGR_SIZE"     BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_HISTORY_COUNT" BIGINT       DEFAULT 0
        NOT NULL,
    "GMT_CREATE"        TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
        NOT NULL,
    "GMT_MODIFIED"      TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
        NOT NULL
);
CREATE TABLE "NACOS"."ROLES"
(
    "USERNAME" VARCHAR(50) NOT NULL,
    "ROLE"     VARCHAR(50) NOT NULL
);
CREATE TABLE "NACOS"."PERMISSIONS"
(
    "ROLE"     VARCHAR(50)  NOT NULL,
    "RESOURCE" VARCHAR(255) NOT NULL,
    "ACTION"   VARCHAR(8)   NOT NULL
);
CREATE TABLE "NACOS"."HIS_CONFIG_INFO"
(
    "ID"                 DECIMAL(20, 0) NOT NULL,
    "NID"                BIGINT IDENTITY(1,1) NOT NULL,
    "DATA_ID"            VARCHAR(255)   NOT NULL,
    "GROUP_ID"           VARCHAR(128)   NOT NULL,
    "APP_NAME"           VARCHAR(128) NULL,
    "CONTENT"            CLOB           NOT NULL,
    "MD5"                VARCHAR(32) NULL,
    "GMT_CREATE"         TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                        NOT NULL,
    "GMT_MODIFIED"       TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                        NOT NULL,
    "SRC_USER"           TEXT NULL,
    "SRC_IP"             VARCHAR(50) NULL,
    "OP_TYPE"            CHAR(10) NULL,
    "TENANT_ID"          VARCHAR(128) DEFAULT ''
        NULL,
    "ENCRYPTED_DATA_KEY" TEXT           NOT NULL
);
CREATE TABLE "NACOS"."GROUP_CAPACITY"
(
    "ID"                BIGINT IDENTITY(1,1) NOT NULL,
    "GROUP_ID"          VARCHAR(128) DEFAULT ''
        NOT NULL,
    "QUOTA"             BIGINT       DEFAULT 0
        NOT NULL,
    "USAGE"             BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_SIZE"          BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_AGGR_COUNT"    BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_AGGR_SIZE"     BIGINT       DEFAULT 0
        NOT NULL,
    "MAX_HISTORY_COUNT" BIGINT       DEFAULT 0
        NOT NULL,
    "GMT_CREATE"        TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
        NOT NULL,
    "GMT_MODIFIED"      TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
        NOT NULL
);
CREATE TABLE "NACOS"."CONFIG_TAGS_RELATION"
(
    "ID"        BIGINT       NOT NULL,
    "TAG_NAME"  VARCHAR(128) NOT NULL,
    "TAG_TYPE"  VARCHAR(64) NULL,
    "DATA_ID"   VARCHAR(255) NOT NULL,
    "GROUP_ID"  VARCHAR(128) NOT NULL,
    "TENANT_ID" VARCHAR(128) DEFAULT ''
        NULL,
    "NID"       BIGINT IDENTITY(1,1) NOT NULL
);
CREATE TABLE "NACOS"."CONFIG_INFO_TAG"
(
    "ID"           BIGINT IDENTITY(1,1) NOT NULL,
    "DATA_ID"      VARCHAR(255) NOT NULL,
    "GROUP_ID"     VARCHAR(128) NOT NULL,
    "TENANT_ID"    VARCHAR(128) DEFAULT ''
        NULL,
    "TAG_ID"       VARCHAR(128) NOT NULL,
    "APP_NAME"     VARCHAR(128) NULL,
    "CONTENT"      CLOB         NOT NULL,
    "MD5"          VARCHAR(32) NULL,
    "GMT_CREATE"   TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                NOT NULL,
    "GMT_MODIFIED" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                NOT NULL,
    "SRC_USER"     TEXT NULL,
    "SRC_IP"       VARCHAR(50) NULL
);
CREATE TABLE "NACOS"."CONFIG_INFO_BETA"
(
    "ID"                 BIGINT IDENTITY(1,1) NOT NULL,
    "DATA_ID"            VARCHAR(255) NOT NULL,
    "GROUP_ID"           VARCHAR(128) NOT NULL,
    "APP_NAME"           VARCHAR(128) NULL,
    "CONTENT"            CLOB         NOT NULL,
    "BETA_IPS"           VARCHAR(1024) NULL,
    "MD5"                VARCHAR(32) NULL,
    "GMT_CREATE"         TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                      NOT NULL,
    "GMT_MODIFIED"       TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                      NOT NULL,
    "SRC_USER"           TEXT NULL,
    "SRC_IP"             VARCHAR(50) NULL,
    "TENANT_ID"          VARCHAR(128) DEFAULT ''
        NULL,
    "ENCRYPTED_DATA_KEY" TEXT         NOT NULL
);
CREATE TABLE "NACOS"."CONFIG_INFO_AGGR"
(
    "ID"           BIGINT IDENTITY(1,1) NOT NULL,
    "DATA_ID"      VARCHAR(255) NOT NULL,
    "GROUP_ID"     VARCHAR(128) NOT NULL,
    "DATUM_ID"     VARCHAR(255) NOT NULL,
    "CONTENT"      CLOB         NOT NULL,
    "GMT_MODIFIED" TIMESTAMP(0) NOT NULL,
    "APP_NAME"     VARCHAR(128) NULL,
    "TENANT_ID"    VARCHAR(128) DEFAULT ''
        NULL
);
CREATE TABLE "NACOS"."CONFIG_INFO"
(
    "ID"                 BIGINT IDENTITY(1,1) NOT NULL,
    "DATA_ID"            VARCHAR(255) NOT NULL,
    "GROUP_ID"           VARCHAR(128) NULL,
    "CONTENT"            CLOB         NOT NULL,
    "MD5"                VARCHAR(32) NULL,
    "GMT_CREATE"         TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                      NOT NULL,
    "GMT_MODIFIED"       TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
                                      NOT NULL,
    "SRC_USER"           TEXT NULL,
    "SRC_IP"             VARCHAR(50) NULL,
    "APP_NAME"           VARCHAR(128) NULL,
    "TENANT_ID"          VARCHAR(128) DEFAULT ''
        NULL,
    "C_DESC"             VARCHAR(256) NULL,
    "C_USE"              VARCHAR(64) NULL,
    "EFFECT"             VARCHAR(64) NULL,
    "TYPE"               VARCHAR(64) NULL,
    "C_SCHEMA"           TEXT NULL,
    "ENCRYPTED_DATA_KEY" TEXT         NOT NULL
);
ALTER TABLE "NACOS"."USERS"
    ADD CONSTRAINT PRIMARY KEY ("USERNAME");

ALTER TABLE "NACOS"."TENANT_INFO"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."TENANT_INFO"
    ADD CONSTRAINT "UK_TENANT_INFO_KPTENANTID" UNIQUE ("KP", "TENANT_ID");

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CONSTRAINT "UK_TENANT_ID" UNIQUE ("TENANT_ID");

ALTER TABLE "NACOS"."ROLES"
    ADD CONSTRAINT "IDX_USER_ROLE" UNIQUE ("USERNAME", "ROLE");

ALTER TABLE "NACOS"."PERMISSIONS"
    ADD CONSTRAINT "UK_ROLE_PERMISSION" UNIQUE ("ROLE", "RESOURCE", "ACTION");

ALTER TABLE "NACOS"."HIS_CONFIG_INFO"
    ADD CONSTRAINT PRIMARY KEY ("NID");

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CONSTRAINT "UK_GROUP_ID" UNIQUE ("GROUP_ID");

ALTER TABLE "NACOS"."CONFIG_TAGS_RELATION"
    ADD CONSTRAINT PRIMARY KEY ("NID");

ALTER TABLE "NACOS"."CONFIG_TAGS_RELATION"
    ADD CONSTRAINT "UK_CONFIGTAGRELATION_CONFIGIDTAG" UNIQUE ("ID", "TAG_NAME", "TAG_TYPE");

ALTER TABLE "NACOS"."CONFIG_INFO_TAG"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."CONFIG_INFO_TAG"
    ADD CONSTRAINT "UK_CONFIGINFOTAG_DATAGROUPTENANTTAG" UNIQUE ("DATA_ID", "GROUP_ID", "TENANT_ID", "TAG_ID");

ALTER TABLE "NACOS"."CONFIG_INFO_BETA"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."CONFIG_INFO_BETA"
    ADD CONSTRAINT "UK_CONFIGINFOBETA_DATAGROUPTENANT" UNIQUE ("DATA_ID", "GROUP_ID", "TENANT_ID");

ALTER TABLE "NACOS"."CONFIG_INFO_AGGR"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."CONFIG_INFO_AGGR"
    ADD CONSTRAINT "UK_CONFIGINFOAGGR_DATAGROUPTENANTDATUM" UNIQUE ("DATA_ID", "GROUP_ID", "TENANT_ID", "DATUM_ID");

ALTER TABLE "NACOS"."CONFIG_INFO"
    ADD CONSTRAINT PRIMARY KEY ("ID");

ALTER TABLE "NACOS"."CONFIG_INFO"
    ADD CONSTRAINT "UK_CONFIGINFO_DATAGROUPTENANT" UNIQUE ("DATA_ID", "GROUP_ID", "TENANT_ID");

CREATE INDEX "IDX_TENANT_ID"
    ON "NACOS"."TENANT_INFO" ("TENANT_ID");

COMMENT
ON TABLE "NACOS"."TENANT_INFO" IS 'tenant_info';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."ID" IS 'id';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."KP" IS 'kp';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."TENANT_ID" IS 'tenant_id';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."TENANT_NAME" IS 'tenant_name';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."TENANT_DESC" IS 'tenant_desc';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."CREATE_SOURCE" IS 'create_source';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."GMT_CREATE" IS '创建时间';

COMMENT
ON COLUMN "NACOS"."TENANT_INFO"."GMT_MODIFIED" IS '修改时间';

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CHECK ("QUOTA" >= 0) ENABLE;

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CHECK ("MAX_HISTORY_COUNT" >= 0) ENABLE;

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CHECK ("MAX_AGGR_SIZE" >= 0) ENABLE;

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CHECK ("MAX_AGGR_COUNT" >= 0) ENABLE;

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CHECK ("MAX_SIZE" >= 0) ENABLE;

ALTER TABLE "NACOS"."TENANT_CAPACITY"
    ADD CHECK ("USAGE" >= 0) ENABLE;

COMMENT
ON TABLE "NACOS"."TENANT_CAPACITY" IS '租户容量信息表';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."ID" IS '主键ID';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."TENANT_ID" IS 'Tenant ID';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."QUOTA" IS '配额,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."USAGE" IS '使用量';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."MAX_SIZE" IS '单个配置大小上限,单位为字节,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."MAX_AGGR_COUNT" IS '聚合子配置最大个数';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."MAX_AGGR_SIZE" IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."MAX_HISTORY_COUNT" IS '最大变更历史数量';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."GMT_CREATE" IS '创建时间';

COMMENT
ON COLUMN "NACOS"."TENANT_CAPACITY"."GMT_MODIFIED" IS '修改时间';

ALTER TABLE "NACOS"."HIS_CONFIG_INFO"
    ADD CHECK ("ID" >= 0) ENABLE;

CREATE INDEX "IDX_GMT_MODIFIED"
    ON "NACOS"."HIS_CONFIG_INFO" ("GMT_MODIFIED");

CREATE INDEX "IDX_GMT_CREATE"
    ON "NACOS"."HIS_CONFIG_INFO" ("GMT_CREATE");

CREATE INDEX "IDX_DID"
    ON "NACOS"."HIS_CONFIG_INFO" ("DATA_ID");

COMMENT
ON TABLE "NACOS"."HIS_CONFIG_INFO" IS '多租户改造';

COMMENT
ON COLUMN "NACOS"."HIS_CONFIG_INFO"."APP_NAME" IS 'app_name';

COMMENT
ON COLUMN "NACOS"."HIS_CONFIG_INFO"."TENANT_ID" IS '租户字段';

COMMENT
ON COLUMN "NACOS"."HIS_CONFIG_INFO"."ENCRYPTED_DATA_KEY" IS '密钥';

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CHECK ("QUOTA" >= 0) ENABLE;

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CHECK ("MAX_HISTORY_COUNT" >= 0) ENABLE;

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CHECK ("MAX_AGGR_SIZE" >= 0) ENABLE;

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CHECK ("MAX_AGGR_COUNT" >= 0) ENABLE;

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CHECK ("MAX_SIZE" >= 0) ENABLE;

ALTER TABLE "NACOS"."GROUP_CAPACITY"
    ADD CHECK ("USAGE" >= 0) ENABLE;

COMMENT
ON TABLE "NACOS"."GROUP_CAPACITY" IS '集群、各Group容量信息表';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."ID" IS '主键ID';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."GROUP_ID" IS 'Group ID,空字符表示整个集群';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."QUOTA" IS '配额,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."USAGE" IS '使用量';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."MAX_SIZE" IS '单个配置大小上限,单位为字节,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."MAX_AGGR_COUNT" IS '聚合子配置最大个数,,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."MAX_AGGR_SIZE" IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."MAX_HISTORY_COUNT" IS '最大变更历史数量';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."GMT_CREATE" IS '创建时间';

COMMENT
ON COLUMN "NACOS"."GROUP_CAPACITY"."GMT_MODIFIED" IS '修改时间';

COMMENT
ON TABLE "NACOS"."CONFIG_TAGS_RELATION" IS 'config_tag_relation';

COMMENT
ON COLUMN "NACOS"."CONFIG_TAGS_RELATION"."ID" IS 'id';

COMMENT
ON COLUMN "NACOS"."CONFIG_TAGS_RELATION"."TAG_NAME" IS 'tag_name';

COMMENT
ON COLUMN "NACOS"."CONFIG_TAGS_RELATION"."TAG_TYPE" IS 'tag_type';

COMMENT
ON COLUMN "NACOS"."CONFIG_TAGS_RELATION"."DATA_ID" IS 'data_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_TAGS_RELATION"."GROUP_ID" IS 'group_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_TAGS_RELATION"."TENANT_ID" IS 'tenant_id';

COMMENT
ON TABLE "NACOS"."CONFIG_INFO_TAG" IS 'config_info_tag';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."ID" IS 'id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."DATA_ID" IS 'data_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."GROUP_ID" IS 'group_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."TENANT_ID" IS 'tenant_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."TAG_ID" IS 'tag_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."APP_NAME" IS 'app_name';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."CONTENT" IS 'content';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."MD5" IS 'md5';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."GMT_CREATE" IS '创建时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."GMT_MODIFIED" IS '修改时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."SRC_USER" IS 'source user';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_TAG"."SRC_IP" IS 'source ip';

COMMENT
ON TABLE "NACOS"."CONFIG_INFO_BETA" IS 'config_info_beta';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."ID" IS 'id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."DATA_ID" IS 'data_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."GROUP_ID" IS 'group_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."APP_NAME" IS 'app_name';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."CONTENT" IS 'content';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."BETA_IPS" IS 'betaIps';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."MD5" IS 'md5';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."GMT_CREATE" IS '创建时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."GMT_MODIFIED" IS '修改时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."SRC_USER" IS 'source user';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."SRC_IP" IS 'source ip';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."TENANT_ID" IS '租户字段';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_BETA"."ENCRYPTED_DATA_KEY" IS '密钥';

COMMENT
ON TABLE "NACOS"."CONFIG_INFO_AGGR" IS '增加租户字段';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."ID" IS 'id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."DATA_ID" IS 'data_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."GROUP_ID" IS 'group_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."DATUM_ID" IS 'datum_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."CONTENT" IS '内容';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."GMT_MODIFIED" IS '修改时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO_AGGR"."TENANT_ID" IS '租户字段';

COMMENT
ON TABLE "NACOS"."CONFIG_INFO" IS 'config_info';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."ID" IS 'id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."DATA_ID" IS 'data_id';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."CONTENT" IS 'content';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."MD5" IS 'md5';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."GMT_CREATE" IS '创建时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."GMT_MODIFIED" IS '修改时间';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."SRC_USER" IS 'source user';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."SRC_IP" IS 'source ip';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."TENANT_ID" IS '租户字段';

COMMENT
ON COLUMN "NACOS"."CONFIG_INFO"."ENCRYPTED_DATA_KEY" IS '密钥';



INSERT INTO "NACOS"."USERS"("USERNAME", "PASSWORD", "ENABLED")
VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1);

INSERT INTO "NACOS"."ROLES"("USERNAME", "ROLE")
VALUES ('nacos', 'ROLE_ADMIN');

七、重新启动测试

连接上数据库后,重新启动测试,成功后访问页面
在这里插入图片描述
在这里插入图片描述

八、打包源码

打开cmd,进入源码根目录
执行mvn命令:

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

打包成功后,显示:
在这里插入图片描述
打包后的nacos位置在\distribution\target\下。
在这里插入图片描述
nacos-server-2.4.0.zip解压直接用就行,配置文件记得修改,自己添加的字段记得加上,运行起来就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud应用框架】GateWay异步非阻塞模型

Spring Cloud Alibaba 之 GateWay工作流程GateWay搭建 文章目录 一、GateWay工作流程工作流程的核心点总结 二、GateWay搭建 一、GateWay工作流程 流程图如下&#xff1a; 核心概念&#xff1a; 客户端向 Spring Cloud Gateway 发出请求。如果Gateway Handler Mapping确定请…

2024年世界机器人大会精彩回顾-人形机器人的天下

8 月 25 日&#xff0c; 2024 世界机器人大会在北京北人亦创国际会展中心闭幕。本次大会以“共育新质生产力 共享智能新未来”为主题&#xff0c;同期举办论坛、博览会、大赛及配套活动&#xff0c;机器人创新新品、应用新场景纷纷亮相。 2024 世界机器人大会分为论坛、博览会、…

qml formLayout实现方式

一、背景 我们制作界面时&#xff0c;通常有表单界面需要制作&#xff0c;如下图&#xff1a; 但是Qt5 是没有 formLayout 的&#xff0c;直到Qt6才有&#xff0c;所以现在 qml 使用 TableView 来实现这个样式 二、实现 enum ComponentType {TitleText,Text,Button,Image} …

开放式耳机漏音有多大?解密最值得购买的五大品牌!

​现在的很多开放式耳机漏音情况已经得到很好的控制了&#xff0c;特别是大品牌的耳机。现在耳机市场上&#xff0c;开放式耳机因为外观时尚、戴着舒服&#xff0c;成了大家日常爱用的热门货。但是&#xff0c;市面上的开放式耳机品牌多得眼花缭乱&#xff0c;质量也是高低不一…

如何使用ssm实现基于JAVA的中小型企业财务管理

TOC ssm364基于JAVA的中小型企业财务管理jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;…

debian12 - openssh-9.6.P1的编译安装(真机 - 联想G480)

文章目录 debian12 - openssh-9.6.P1的编译安装(真机 - 联想G480)概述笔记G480上安装debian12配置debian12现在用WindTerm_2.6.0按照telnet方式去连接试试配置debian12中的telnet安装telnet服务查看所有服务当前ssh, telnet状态准备更新openssl3.2和openssh在真机上更新openssl…

Andon安灯系统在汽车零部件工厂起到什么作用?

在当今竞争激烈的汽车市场中&#xff0c;汽车零部件工厂的高效运作和高质量生产至关重要。而 Andon 安灯系统作为一种先进的生产管理工具&#xff0c;在汽车零部件工厂中发挥着举足轻重的作用。 一、Andon安灯系统实时监控生产状态 汽车零部件工厂的生产线通常较为复杂&#x…

Quartz定时任务框架——若依

文章目录 定时任务的执行新增定时任务订单任务状态修改quartz的集群模式 定时任务的执行 新增定时任务 订单任务状态修改 quartz的集群模式 把若依项目中的quartz数据库导入到数据库中然后打开ScheduleConfig配置类复制项目启动&#xff08;记得修改端口&#xff09;&#xff0…

给自己复盘用的tjxt笔记day11第二部分

异步领券 优化方案分析 对于高并发问题&#xff0c;优化的思路有异步写和合并写。 其中&#xff0c;合并写请求比较适合应用在写频率较高&#xff0c;写数据比较简单的场景。而异步写则更适合应用在业务比较复杂&#xff0c;业务链较长的场景。 显然&#xff0c;领券业务更…

【功能自动化】使用测试套件运行测试函数

1.创建registers.py 将registers.py放在文件夹下 registers.py 代码实现 # 导入包 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep import unittest import parameterizeddriver None file open(r"us…

ImportError:DLL load failed while importing cv2:找不到指定的模块

用pyinsatller打包好脚本执行后&#xff0c;出现上面的错误&#xff0c;这个错误很明显就是缺少了必需的dll文件&#xff0c;这个网上的资料也比较少&#xff0c;我搜了很久也没找出能解决的方法。 方法1 看官网&#xff1a;https://pypi.org/project/opencv-python/ 拉倒下…

MDS100-16-16-ASEMI三相整流模块MDS100-16

编辑&#xff1a;ll MDS100-16-16-ASEMI三相整流模块MDS100-16 型号&#xff1a;MDS100-16 品牌&#xff1a;ASEMI 封装&#xff1a;M18 批号&#xff1a;2024 类型&#xff1a;整流模块 电流&#xff1a;100A 电压&#xff1a;1600V 安装方式&#xff1a;直插式封装 …

IDEA没有SQL语句提示

解决已经在IDEA连接数据库&#xff0c;但是写SQL语句不会提示列名、属性之类的 Mapper 映射没有 SQL 提示 设置中搜索&#xff0c;把方言改成 MySQL SQL Dialects

Requestium - 将Requests和Selenium合并在一起的自动化测试工具

Requests 是 Python 的第三方库&#xff0c;主要用于发送 http 请求&#xff0c;常用于接口自动化测试等。 Selenium 是一个用于 Web 应用程序的自动化测试工具。Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 本篇介绍一款将 Requests 和 Seleniu…

谷粒商城实战笔记-281-商城业务-订单服务-锁定库存

文章目录 一&#xff0c;锁定库存的基本逻辑二&#xff0c;具体实现 创建订单时&#xff0c;有一个非常重要的步骤&#xff0c;就是锁定库存&#xff0c;或者称之为预占库存。 尽管还没有卖出去&#xff0c;但是因为订单已经创建&#xff0c;所以要确保这个订单对应商品是有库…

最后一波,漂亮、简洁的登录页面模板分享,拿来即用(三)

文章目录 前言一、很有质感的jQuery登录模板二、纯CSS实现的清凉风格的登录三、基于layui的后台管理登录模板四、jQuery个性化登录模板五、带下雪背景的登录注册页面 前言 在做管理系统的时候&#xff0c;有时为了做一个漂亮简洁的登录页面&#xff0c;对应擅长搞后端开发的老…

15行为型设计模式——责任链模式

一、责任链模式简介 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;也叫职责链模式或者职责连锁模式。用于处理请求的多个对象&#xff0c;以实现请求的分发和处理。它的核心思想是将请求的处理职责链式地传递给多个对象…

NRP-Z24功率探头RS/NRP-Z23详情参数NRP-Z21功率传感器

USB 功率传感器&#xff1a; NRP-Z11 频率范围&#xff1a;10 MHz - 8 GHz 功率范围&#xff1a;-67 dBm to 23 dBm. NRP-Z21 频率范围&#xff1a;10 MHz - 18 GHz 功率范围&#xff1a;-67 dBm to 23 dBm. NRP-Z22 频率范围&#xff1a;10 MHz - 18 GHz 功率范围&#xff…

Java:简述类的加载机制-双亲委派

类加载的机制过程分为以下&#xff1a;加载、验证、准备、解析、初始化等。 在第一步的加载环节&#xff0c;Java类加载器有四种&#xff1a;Bootstrap类加载器、Extention 类加载器、Application类加载器、Custom自定义类加载器&#xff0c;其中会涉及“双亲委派”模式。 一…

Linux 安装Mysql保姆级教程

一、检查环境 我们登录服务器,查看之前是否安装过mysql rpm -qa | grep mysql 由于我之前安装过,所以这里是有数据的 如果需要删除重新下载,可以使用 rpm -e mysql57-community-release-el7-10.noarch.rpm 二、安装 1、下载 接下来下载安装包 wget -i -c http:/…