nacos适配SqlServer、Oracle

  继上文《nacos适配达梦、瀚高、人大金仓数据库及部分源码探究 》后补充nacos适配SqlServer、Oracle的贴码,主要区别是SqlServer、Oracle的分页SQL有点不一样,做个记录;

  SqlServer的分页有三种实现方式:offset /fetch next、利用max(主键)、利用row_number关键字;

  ps:具体可参考《sqlServer如何实现分页查询

一.nacos适配SqlServer

  1.插件代码:
  1.0.DataSourceConstant

public class DataSourceConstant {

    public static final String DM = "dm";

    public static final String HIGHGO = "highgo";

    public static final String KINGBASE = "kingbase";

    public static final String PG = "postgresql";
    
    //增加类型
    public static final String SQLSERVER="sqlserver";

}
  1.1.ConfigInfoAggrMapperBySqlServer

public class ConfigInfoAggrMapperBySqlServer extends AbstractConfigInfoAggrMapperCommon {

    @Override
    public String findConfigInfoAggrByPageFetchRows(int startRow, int pageSize) {
        return  "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 ("+startRow+"*"+pageSize+") rows fetch next "+pageSize+" rows only";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }

}
   1.2.ConfigInfoBetaMapperBySqlServer

public class ConfigInfoBetaMapperBySqlServer extends AbstractConfigInfoBetaMapperCommon {

    @Override
    public String findAllConfigInfoBetaForDumpAllFetchRows(int startRow, int pageSize) {
        return " SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips,encrypted_data_key "
                + " FROM ( SELECT id FROM config_info_beta  ORDER BY id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only"
                + " )" + "  g, config_info_beta t WHERE g.id = t.id ";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }

}
   1.3.ConfigInfoMapperBySqlServer

public class ConfigInfoMapperBySqlServer extends AbstractConfigInfoMapperCommon {
    private static final String DATA_ID = "dataId";

    private static final String GROUP = "group";

    private static final String APP_NAME = "appName";

    private static final String CONTENT = "content";

    private static final String TENANT = "tenant";

    @Override
    public String findConfigInfoByAppFetchRows(int startRow, int pageSize) {
        return "SELECT id,data_id,group_id,tenant_id,app_name,content FROM config_info"
                + " WHERE tenant_id LIKE ? AND app_name= ?" + " order by id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }


    @Override
    public String getGroupIdList(int startRow, int pageSize) {
        return "SELECT group_id FROM config_info WHERE tenant_id ='' GROUP BY group_id " +
                "order by group_id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }


    @Override
    public String findAllConfigKey(int startRow, int pageSize) {
        return " SELECT data_id,group_id,app_name  FROM ( "
                + " SELECT id FROM config_info WHERE tenant_id LIKE ? ORDER BY id " +
                "offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only" + " )" + " g, config_info t WHERE g.id = t.id  ";
    }

    @Override
    public String findAllConfigInfoBaseFetchRows(int startRow, int pageSize) {
        return "SELECT t.id,data_id,group_id,content,md5"
                + " FROM ( SELECT id FROM config_info ORDER BY id " +
                "offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only ) "
                + " g, config_info t  WHERE g.id = t.id ";
    }


    @Override
    public String findAllConfigInfoFragment(int startRow, int pageSize) {
        return "SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type,encrypted_data_key "
                + "FROM config_info WHERE id > ? ORDER BY id ASC offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }


    @Override
    public String findChangeConfigFetchRows(Map<String, String> params, final Timestamp startTime,
                                            final Timestamp endTime, int startRow, int pageSize, long lastMaxId) {
        final String tenant = params.get(TENANT);
        final String dataId = params.get(DATA_ID);
        final String group = params.get(GROUP);
        final String appName = params.get(APP_NAME);
        final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
        final String sqlFetchRows = "SELECT id,data_id,group_id,tenant_id,app_name,content,type,md5,gmt_modified FROM config_info WHERE ";
        String where = " 1=1 ";
        if (!StringUtils.isBlank(dataId)) {
            where += " AND data_id LIKE ? ";
        }
        if (!StringUtils.isBlank(group)) {
            where += " AND group_id LIKE ? ";
        }

        if (!StringUtils.isBlank(tenantTmp)) {
            where += " AND tenant_id = ? ";
        }

        if (!StringUtils.isBlank(appName)) {
            where += " AND app_name = ? ";
        }
        if (startTime != null) {
            where += " AND gmt_modified >=? ";
        }
        if (endTime != null) {
            where += " AND gmt_modified <=? ";
        }
        return sqlFetchRows + where + " AND id > " + lastMaxId + " ORDER BY id ASC" + " offset " + pageSize + " rows fetch next 1 rows only";
    }

    @Override
    public String listGroupKeyMd5ByPageFetchRows(int startRow, int pageSize) {
        return "SELECT t.id,data_id,group_id,tenant_id,app_name,md5,type,gmt_modified,encrypted_data_key FROM "
                + "( SELECT id FROM config_info ORDER BY id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only"
                + " ) g, config_info t WHERE g.id = t.id";
    }

    @Override
    public String findConfigInfoBaseLikeFetchRows(Map<String, String> params, int startRow, int pageSize) {
        final String sqlFetchRows = "SELECT id,data_id,group_id,tenant_id,content FROM config_info WHERE ";
        String where = " 1=1 AND tenant_id='' ";
        if (!StringUtils.isBlank(params.get(DATA_ID))) {
            where += " AND data_id LIKE ? ";
        }
        if (!StringUtils.isBlank(params.get(GROUP))) {
            where += " AND group_id LIKE ";
        }
        if (!StringUtils.isBlank(params.get(CONTENT))) {
            where += " AND content LIKE ? ";
        }
        return sqlFetchRows + where + " order by id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }


    @Override
    public String findConfigInfo4PageFetchRows(Map<String, String> params, int startRow, int pageSize) {
        final String appName = params.get(APP_NAME);
        final String dataId = params.get(DATA_ID);
        final String group = params.get(GROUP);
        final String sql = "SELECT id,data_id,group_id,tenant_id,app_name,content,type,encrypted_data_key FROM config_info";
        StringBuilder where = new StringBuilder(" WHERE ");
        where.append(" tenant_id=? ");
        if (StringUtils.isNotBlank(dataId)) {
            where.append(" AND data_id=? ");
        }
        if (StringUtils.isNotBlank(group)) {
            where.append(" AND group_id=? ");
        }
        if (StringUtils.isNotBlank(appName)) {
            where.append(" AND app_name=? ");
        }
        return sql + where + " order by id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }


    @Override
    public String findConfigInfoLike4PageFetchRows(Map<String, String> params, int startRow, int pageSize) {
        String dataId = params.get(DATA_ID);
        String group = params.get(GROUP);
        final String appName = params.get(APP_NAME);
        final String content = params.get(CONTENT);
        final String sqlFetchRows = "SELECT id,data_id,group_id,tenant_id,app_name,content,encrypted_data_key FROM config_info";
        StringBuilder where = new StringBuilder(" WHERE ");
        where.append(" tenant_id LIKE ? ");
        if (!StringUtils.isBlank(dataId)) {
            where.append(" AND data_id LIKE ? ");
        }
        if (!StringUtils.isBlank(group)) {
            where.append(" AND group_id LIKE ? ");
        }
        if (!StringUtils.isBlank(appName)) {
            where.append(" AND app_name = ? ");
        }
        if (!StringUtils.isBlank(content)) {
            where.append(" AND content LIKE ? ");
        }
        return sqlFetchRows + where + " order by id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }

    @Override
    public String findAllConfigInfoFetchRows(int startRow, int pageSize) {
        return "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 (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only"
                + " )" + " g, config_info t  WHERE g.id = t.id ";
    }

    @Override
    public String findConfigInfoBaseByGroupFetchRows(int startRow, int pageSize) {
        return "SELECT id,data_id,group_id,content FROM config_info WHERE group_id=? AND tenant_id=?"
                + " order by id offset (" + startRow + "*" + pageSize + ") rows fetch next " + pageSize + " rows only";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }


}
  1.4.ConfigInfoTagMapperBySqlServer

public class ConfigInfoTagMapperBySqlServer extends AbstractConfigInfoTagMapperCommon {

    @Override
    public String findAllConfigInfoTagForDumpAllFetchRows(int startRow, int pageSize) {
        return " SELECT t.id,data_id,group_id,tenant_id,tag_id,app_name,content,md5,gmt_modified "
                + " FROM (  SELECT id FROM config_info_tag  ORDER BY id " +
                "offset ("+startRow+"*"+pageSize+") rows fetch next "+pageSize+" rows only"
                + " ) " + "g, config_info_tag t  WHERE g.id = t.id  ";
    }


    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }
}
  1.5.ConfigTagsRelationMapperBySqlServer

public class ConfigTagsRelationMapperBySqlServer extends AbstractConfigTagsRelationMapperCommon {
    @Override
    public String findConfigInfo4PageFetchRows(Map<String, String> params, int tagSize, int startRow, int pageSize) {
        final String appName = params.get("appName");
        final String dataId = params.get("dataId");
        final String group = params.get("group");
        StringBuilder where = new StringBuilder(" WHERE ");
        final String sql = "SELECT a.id,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content FROM config_info  a LEFT JOIN "
                + "config_tags_relation b ON a.id=b.id";

        where.append(" a.tenant_id=? ");

        if (StringUtils.isNotBlank(dataId)) {
            where.append(" AND a.data_id=? ");
        }
        if (StringUtils.isNotBlank(group)) {
            where.append(" AND a.group_id=? ");
        }
        if (StringUtils.isNotBlank(appName)) {
            where.append(" AND a.app_name=? ");
        }

        where.append(" AND b.tag_name IN (");
        for (int i = 0; i < tagSize; i++) {
            if (i != 0) {
                where.append(", ");
            }
            where.append('?');
        }
        where.append(") ");
        return sql + where +  " order by id offset ("+startRow+"*"+pageSize+") rows fetch next "+pageSize+" rows only";
    }


    @Override
    public String findConfigInfoLike4PageFetchRows(final Map<String, String> params, int tagSize, int startRow,
                                                   int pageSize) {
        final String appName = params.get("appName");
        final String content = params.get("content");
        final String dataId = params.get("dataId");
        final String group = params.get("group");
        StringBuilder where = new StringBuilder(" WHERE ");
        final String sqlFetchRows = "SELECT a.id,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content "
                + "FROM config_info a LEFT JOIN config_tags_relation b ON a.id=b.id ";

        where.append(" a.tenant_id LIKE ? ");
        if (!StringUtils.isBlank(dataId)) {
            where.append(" AND a.data_id LIKE ? ");
        }
        if (!StringUtils.isBlank(group)) {
            where.append(" AND a.group_id LIKE ? ");
        }
        if (!StringUtils.isBlank(appName)) {
            where.append(" AND a.app_name = ? ");
        }
        if (!StringUtils.isBlank(content)) {
            where.append(" AND a.content LIKE ? ");
        }

        where.append(" AND b.tag_name IN (");
        for (int i = 0; i < tagSize; i++) {
            if (i != 0) {
                where.append(", ");
            }
            where.append('?');
        }
        where.append(") ");
        return sqlFetchRows + where + " order by id offset ("+startRow+"*"+pageSize+") rows fetch next "+pageSize+" rows only";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }
}
  1.6.GroupCapacityMapperBySqlServer

public class GroupCapacityMapperBySqlServer extends AbstractGroupCapacityMapperCommon {


    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }
}
  1.7.HistoryConfigInfoMapperBySqlServer

public class HistoryConfigInfoMapperBySqlServer extends AbstractHistoryConfigInfoMapperCommon {


    public String pageFindConfigHistoryFetchRows(int pageNo, int pageSize) {
        final int offset = (pageNo - 1) * pageSize;
        final int limit = pageSize;
        return "SELECT nid,data_id,group_id,tenant_id,app_name,src_ip,src_user,op_type,gmt_create,gmt_modified FROM his_config_info "
                + "WHERE data_id = ? AND group_id = ? AND tenant_id = ? ORDER BY nid DESC" +
                " offset " + offset + " rows fetch next " + limit + " rows only";
    }


    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }
}
  1.8.TenantCapacityMapperBySqlServer

public class TenantCapacityMapperBySqlServer extends AbstractTenantCapacityMapperCommon {


    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }

}
  1.9.TenantInfoMapperBySqlServer

public class TenantInfoMapperBySqlServer extends AbstractMapper implements TenantInfoMapper {

    @Override
    public String getTableName() {
        return TableConstant.TENANT_INFO;
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.SQLSERVER;
    }

}
   2.ddl

CREATE TABLE config_info (
  id bigint identity(1,1) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  app_name varchar(128),
  content text,
  md5 varchar(32) DEFAULT NULL,
  gmt_create datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  gmt_modified datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  src_user varchar(128) DEFAULT NULL,
  src_ip varchar(20) DEFAULT NULL,
  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 DEFAULT NULL,
  encrypted_data_key varchar(100) DEFAULT NULL,
  constraint configinfo_id_key PRIMARY KEY (id),
  constraint uk_configinfo_datagrouptenant UNIQUE (data_id,group_id,tenant_id));
CREATE INDEX configinfo_dataid_key_idx ON config_info(data_id);
CREATE INDEX configinfo_groupid_key_idx ON config_info(group_id);
CREATE INDEX configinfo_dataid_group_key_idx ON config_info(data_id, group_id); 

CREATE TABLE his_config_info (
  id bigint NOT NULL,
  nid bigint identity(1,1) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  app_name varchar(128),
  content text,
  md5 varchar(32) DEFAULT NULL,
  gmt_create datetime NOT NULL DEFAULT '2010-05-05 00:00:00.000',
  gmt_modified datetime NOT NULL DEFAULT '2010-05-05 00:00:00.000',
  src_user varchar(128),
  src_ip varchar(20) DEFAULT NULL,
  op_type char(10) DEFAULT NULL,
  encrypted_data_key varchar(100) DEFAULT NULL,
  constraint hisconfiginfo_nid_key PRIMARY KEY (nid));

CREATE INDEX hisconfiginfo_dataid_key_idx ON his_config_info(data_id);
CREATE INDEX hisconfiginfo_gmt_create_idx ON his_config_info(gmt_create);
CREATE INDEX hisconfiginfo_gmt_modified_idx ON his_config_info(gmt_modified);

CREATE TABLE config_info_beta (
  id bigint identity(1,1) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  app_name varchar(128),
  content text,
  beta_ips varchar(1024),
  md5 varchar(32) DEFAULT NULL,
  gmt_create datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  gmt_modified datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  src_user varchar(128),
  src_ip varchar(20) DEFAULT NULL,
  encrypted_data_key varchar(100) DEFAULT NULL,
  constraint configinfobeta_id_key PRIMARY KEY (id),
  constraint uk_configinfobeta_datagrouptenant UNIQUE (data_id,group_id,tenant_id));

  
CREATE TABLE 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 '',
  tag_id varchar(128) NOT NULL,
  app_name varchar(128),
  content text,
  md5 varchar(32) DEFAULT NULL,
  gmt_create datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  gmt_modified datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  src_user varchar(128),
  src_ip varchar(20) DEFAULT NULL,
  constraint configinfotag_id_key PRIMARY KEY (id),
  constraint uk_configinfotag_datagrouptenanttag UNIQUE (data_id,group_id,tenant_id,tag_id));

CREATE TABLE config_info_aggr (
  id bigint identity(1,1)  NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  datum_id varchar(255) NOT NULL,
  app_name varchar(128),
  content text,
  gmt_modified datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  constraint configinfoaggr_id_key PRIMARY KEY (id),
  constraint uk_configinfoaggr_datagrouptenantdatum UNIQUE (data_id,group_id,tenant_id,datum_id));

CREATE TABLE app_list (
 id bigint identity(1,1) NOT NULL,
 app_name varchar(128) NOT NULL,
 is_dynamic_collect_disabled smallint DEFAULT 0,
 last_sub_info_collected_time datetime DEFAULT '1970-01-01 08:00:00.0',
 sub_info_lock_owner varchar(128),
 sub_info_lock_time datetime DEFAULT '1970-01-01 08:00:00.0',
 constraint applist_id_key PRIMARY KEY (id),
 constraint uk_appname UNIQUE (app_name));

CREATE TABLE app_configdata_relation_subs (
  id bigint identity(1,1) NOT NULL,
  app_name varchar(128) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  gmt_modified datetime DEFAULT '2010-05-05 00:00:00',
  constraint configdatarelationsubs_id_key PRIMARY KEY (id),
  constraint uk_app_sub_config_datagroup UNIQUE (app_name, data_id, group_id));


CREATE TABLE app_configdata_relation_pubs (
  id bigint identity(1,1) NOT NULL,
  app_name varchar(128) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  gmt_modified datetime DEFAULT '2010-05-05 00:00:00',
  constraint configdatarelationpubs_id_key PRIMARY KEY (id),
  constraint uk_app_pub_config_datagroup UNIQUE (app_name, data_id, group_id));

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 bigint identity(1,1) NOT NULL,
  constraint config_tags_id_key PRIMARY KEY (nid),
  constraint uk_configtagrelation_configidtag UNIQUE (id, tag_name, tag_type));

CREATE INDEX config_tags_tenant_id_idx ON config_tags_relation(tenant_id);

CREATE TABLE group_capacity (
  id bigint identity(1,1) NOT NULL,
  group_id varchar(128) DEFAULT '',
  quota int DEFAULT 0,
  usage int DEFAULT 0,
  max_size int DEFAULT 0,
  max_aggr_count int DEFAULT 0,
  max_aggr_size int DEFAULT 0,
  max_history_count int DEFAULT 0,
  gmt_create datetime DEFAULT '2010-05-05 00:00:00',
  gmt_modified datetime DEFAULT '2010-05-05 00:00:00',
  constraint group_capacity_id_key PRIMARY KEY (id),
  constraint uk_group_id UNIQUE (group_id));

CREATE TABLE tenant_capacity (
  id bigint identity(1,1) NOT NULL,
  tenant_id varchar(128) DEFAULT '',
  quota int DEFAULT 0,
  usage int DEFAULT 0,
  max_size int DEFAULT 0,
  max_aggr_count int DEFAULT 0,
  max_aggr_size int DEFAULT 0,
  max_history_count int DEFAULT 0,
  gmt_create datetime DEFAULT '2010-05-05 00:00:00',
  gmt_modified datetime DEFAULT '2010-05-05 00:00:00',
  constraint tenant_capacity_id_key PRIMARY KEY (id),
  constraint uk_tenant_id UNIQUE (tenant_id));

CREATE TABLE tenant_info (
  id bigint identity(1,1) 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,
  constraint tenant_info_id_key PRIMARY KEY (id),
  constraint uk_tenant_info_kptenantid UNIQUE (kp,tenant_id));
CREATE INDEX tenant_info_tenant_id_idx ON tenant_info(tenant_id);

CREATE TABLE users (
    username varchar(50) NOT NULL PRIMARY KEY,
    password varchar(500) NOT NULL,
    enabled bit 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', 1);

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

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>12.4.0.jre11</version>
        </dependency>

 二.nacos适配Oracle

  1.插件代码:
  1.0.DataSourceConstant

public class DataSourceConstant {

    public static final String DM = "dm";

    public static final String HIGHGO = "highgo";

    public static final String KINGBASE = "kingbase";

    public static final String PG = "postgresql";
    
    public static final String SQLSERVER="sqlserver";
    
    //增加类型
    public static final String ORACLE = "oracle";
}
  1.1.ConfigInfoAggrMapperByOracle

public class ConfigInfoAggrMapperByOracle extends AbstractConfigInfoAggrMapperCommon {

    @Override
    public String findConfigInfoAggrByPageFetchRows(int startRow, int pageSize) {
        return "SELECT * FROM (SELECT data_id,group_id,tenant_id,datum_id,app_name,content, ROWNUM as rnum"
                + " FROM config_info_aggr WHERE data_id= ? AND "
                + "group_id= ? AND tenant_id= ? ORDER BY datum_id) WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }
}
   1.2.ConfigInfoBetaMapperByOracle

public class ConfigInfoBetaMapperByOracle extends AbstractConfigInfoBetaMapperCommon {

    @Override
    public String findAllConfigInfoBetaForDumpAllFetchRows(int startRow, int pageSize) {
        return " SELECT * FROM (SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips,encrypted_data_key "
                + " FROM ( SELECT * FROM (SELECT id, ROWNUM as rnum FROM config_info_beta  ORDER BY id) "
                + "WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum" + " )"
                + "  g, config_info_beta t WHERE g.id = t.id ";
    }
    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }
}
   1.3.ConfigInfoMapperByOracle

public class ConfigInfoMapperByOracle extends AbstractConfigInfoMapperCommon {
    private static final String DATA_ID = "dataId";

    private static final String GROUP = "group";

    private static final String APP_NAME = "appName";

    private static final String CONTENT = "content";

    private static final String TENANT = "tenant";
    @Override
    public String findConfigInfoByAppFetchRows(int startRow, int pageSize) {
        return "SELECT * FROM (SELECT id,data_id,group_id,tenant_id,app_name,content, ROWNUM as rnum FROM config_info"
                + " WHERE tenant_id LIKE ? AND app_name= ?)" + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum";
    }

    @Override
    public String getTenantIdList(int startRow, int pageSize) {
        return "SELECT * FROM (SELECT tenant_id, ROWNUM as rnum FROM config_info WHERE tenant_id != '' GROUP BY tenant_id)"
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum";
    }

    @Override
    public String getGroupIdList(int startRow, int pageSize) {
        return "SELECT * FROM (SELECT group_id, ROWNUM as rnum FROM config_info WHERE tenant_id ='' GROUP BY group_id) "
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum";
    }

    @Override
    public String findAllConfigKey(int startRow, int pageSize) {
        return " SELECT data_id,group_id,app_name  FROM ( "
                + " SELECT * FROM (SELECT id, ROWNUM as rnum FROM config_info WHERE tenant_id LIKE ? ORDER BY id)"
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum"
                + " )" + " g, config_info t WHERE g.id = t.id  ";
    }
    @Override
    public String findAllConfigInfoBaseFetchRows(int startRow, int pageSize) {
        return "SELECT t.id,data_id,group_id,content,md5"
                + " FROM (SELECT * FROM ( SELECT id, ROWNUM as rnum FROM config_info ORDER BY id)"
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum) "
                + " g, config_info t  WHERE g.id = t.id ";
    }

    @Override
    public String findAllConfigInfoFragment(int startRow, int pageSize) {
        return "SELECT * FROM (SELECT id,ROWNUM as rnum,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type,encrypted_data_key "
                + "FROM config_info WHERE id > ? ORDER BY id ASC) " + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }
    @Override
    public String findChangeConfigFetchRows(Map<String, String> params, final Timestamp startTime,
                                            final Timestamp endTime, int startRow, int pageSize, long lastMaxId) {
        final String tenant = params.get(TENANT);
        final String dataId = params.get(DATA_ID);
        final String group = params.get(GROUP);
        final String appName = params.get(APP_NAME);
        final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
        final String sqlFetchRows = "SELECT * FROM (SELECT id,data_id,group_id,tenant_id,app_name,content,type,md5,gmt_modified"
                + ", ROWNUM as rnum FROM config_info WHERE ";
        String where = " 1=1 ";
        if (!StringUtils.isBlank(dataId)) {
            where += " AND data_id LIKE ? ";
        }
        if (!StringUtils.isBlank(group)) {
            where += " AND group_id LIKE ? ";
        }

        if (!StringUtils.isBlank(tenantTmp)) {
            where += " AND tenant_id = ? ";
        }

        if (!StringUtils.isBlank(appName)) {
            where += " AND app_name = ? ";
        }
        if (startTime != null) {
            where += " AND gmt_modified >=? ";
        }
        if (endTime != null) {
            where += " AND gmt_modified <=? ";
        }
        return sqlFetchRows + where + " AND id > " + lastMaxId + " ORDER BY id ASC)" + " WHERE  rnum >= " + 0 + " and " + pageSize + " >= rnum";
    }

    @Override
    public String listGroupKeyMd5ByPageFetchRows(int startRow, int pageSize) {
        return "SELECT t.id,data_id,group_id,tenant_id,app_name,md5,type,gmt_modified,encrypted_data_key FROM "
                + "(SELECT * FROM ( SELECT id, ROWNUM as rnum FROM config_info ORDER BY id) "
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum "
                + " ) g, config_info t WHERE g.id = t.id";
    }
    @Override
    public String findConfigInfoBaseLikeFetchRows(Map<String, String> params, int startRow, int pageSize) {
        final String sqlFetchRows = "SELECT * FROM (SELECT id,data_id,group_id,tenant_id,content, ROWNUM as rnum FROM config_info WHERE ";
        String where = " 1=1 AND tenant_id='' ";
        if (!StringUtils.isBlank(params.get(DATA_ID))) {
            where += " AND data_id LIKE ? ";
        }
        if (!StringUtils.isBlank(params.get(GROUP))) {
            where += " AND group_id LIKE ";
        }
        if (!StringUtils.isBlank(params.get(CONTENT))) {
            where += " AND content LIKE ? ";
        }
        return sqlFetchRows + where + ") " + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }
    @Override
    public String findConfigInfo4PageFetchRows(Map<String, String> params, int startRow, int pageSize) {
        final String appName = params.get(APP_NAME);
        final String dataId = params.get(DATA_ID);
        final String group = params.get(GROUP);
        final String sql = "SELECT * FROM (SELECT id,data_id,group_id,tenant_id,app_name,content,type,encrypted_data_key,"
                + " ROWNUM as rnum FROM config_info";
        StringBuilder where = new StringBuilder(" WHERE ");
        where.append(" tenant_id=? ");
        if (StringUtils.isNotBlank(dataId)) {
            where.append(" AND data_id=? ");
        }
        if (StringUtils.isNotBlank(group)) {
            where.append(" AND group_id=? ");
        }
        if (StringUtils.isNotBlank(appName)) {
            where.append(" AND app_name=? ");
        }
        return sql + where + ")  " + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }


    @Override
    public String findConfigInfoLike4PageFetchRows(Map<String, String> params, int startRow, int pageSize) {
        String dataId = params.get(DATA_ID);
        String group = params.get(GROUP);
        final String appName = params.get(APP_NAME);
        final String content = params.get(CONTENT);
        final String sqlFetchRows = "SELECT * FROM (SELECT id,data_id,group_id,tenant_id,app_name,content,encrypted_data_key,"
                + " ROWNUM as rnum FROM config_info";
        StringBuilder where = new StringBuilder(" WHERE ");
        where.append(" tenant_id LIKE ? ");
        if (!StringUtils.isBlank(dataId)) {
            where.append(" AND data_id LIKE ? ");
        }
        if (!StringUtils.isBlank(group)) {
            where.append(" AND group_id LIKE ? ");
        }
        if (!StringUtils.isBlank(appName)) {
            where.append(" AND app_name = ? ");
        }
        if (!StringUtils.isBlank(content)) {
            where.append(" AND content LIKE ? ");
        }
        return sqlFetchRows + where + " ) " + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }

    @Override
    public String findAllConfigInfoFetchRows(int startRow, int pageSize) {
        return "SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5 "
                + " FROM (SELECT * FROM (  SELECT id, ROWNUM as rnum FROM config_info WHERE tenant_id LIKE ? ORDER BY id)"
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum)"
                + " g, config_info t  WHERE g.id = t.id ";
    }

    @Override
    public String findConfigInfoBaseByGroupFetchRows(int startRow, int pageSize) {
        return "SELECT * FROM (SELECT id,data_id,group_id,content, ROWNUM as rnum FROM config_info WHERE group_id=? AND tenant_id=?" + ")  "
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }
    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }


}
  1.4.ConfigInfoTagMapperByOracle

public class ConfigInfoTagMapperByOracle extends AbstractConfigInfoTagMapperCommon {

    @Override
    public String findAllConfigInfoTagForDumpAllFetchRows(int startRow, int pageSize) {
        return " SELECT t.id,data_id,group_id,tenant_id,tag_id,app_name,content,md5,gmt_modified "
                + " FROM ( SELECT * FROM ( SELECT id, ROWNUM as rnum FROM config_info_tag  ORDER BY id) "
                + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ) "
                + "g, config_info_tag t  WHERE g.id = t.id  ";
    }
    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }
}
  1.5.ConfigTagsRelationMapperByOracle

public class ConfigTagsRelationMapperByOracle extends AbstractConfigTagsRelationMapperCommon {
    @Override
    public String findConfigInfo4PageFetchRows(Map<String, String> params, int tagSize, int startRow, int pageSize) {
        final String appName = params.get("appName");
        final String dataId = params.get("dataId");
        final String group = params.get("group");
        StringBuilder where = new StringBuilder(" WHERE ");
        final String sql =
                "SELECT * FROM (SELECT a.id,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content, ROWNUM as rnum FROM config_info  a LEFT JOIN "
                        + "config_tags_relation b ON a.id=b.id";

        where.append(" a.tenant_id=? ");

        if (StringUtils.isNotBlank(dataId)) {
            where.append(" AND a.data_id=? ");
        }
        if (StringUtils.isNotBlank(group)) {
            where.append(" AND a.group_id=? ");
        }
        if (StringUtils.isNotBlank(appName)) {
            where.append(" AND a.app_name=? ");
        }

        where.append(" AND b.tag_name IN (");
        for (int i = 0; i < tagSize; i++) {
            if (i != 0) {
                where.append(", ");
            }
            where.append('?');
        }
        where.append(") ");
        return sql + where + ")" + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }


    @Override
    public String findConfigInfoLike4PageFetchRows(final Map<String, String> params, int tagSize, int startRow,
                                                   int pageSize) {
        final String appName = params.get("appName");
        final String content = params.get("content");
        final String dataId = params.get("dataId");
        final String group = params.get("group");
        StringBuilder where = new StringBuilder(" WHERE ");
        final String sqlFetchRows = "SELECT * FROM (SELECT a.id,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content, ROWNUM as rnum "
                + "FROM config_info a LEFT JOIN config_tags_relation b ON a.id=b.id ";

        where.append(" a.tenant_id LIKE ? ");
        if (!StringUtils.isBlank(dataId)) {
            where.append(" AND a.data_id LIKE ? ");
        }
        if (!StringUtils.isBlank(group)) {
            where.append(" AND a.group_id LIKE ? ");
        }
        if (!StringUtils.isBlank(appName)) {
            where.append(" AND a.app_name = ? ");
        }
        if (!StringUtils.isBlank(content)) {
            where.append(" AND a.content LIKE ? ");
        }

        where.append(" AND b.tag_name IN (");
        for (int i = 0; i < tagSize; i++) {
            if (i != 0) {
                where.append(", ");
            }
            where.append('?');
        }
        where.append(") ");
        return sqlFetchRows + where + ") " + " WHERE  rnum >= " + startRow + " and " + pageSize + " >= rnum ";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }
}
  1.6.GroupCapacityMapperByOracle

public class GroupCapacityMapperByOracle extends AbstractGroupCapacityMapperCommon {


    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }
}
  1.7.HistoryConfigInfoMapperByOracle

public class HistoryConfigInfoMapperByOracle extends AbstractHistoryConfigInfoMapperCommon {

    public String pageFindConfigHistoryFetchRows(int pageNo, int pageSize) {
        final int offset = (pageNo - 1) * pageSize;
        final int limit = pageSize;
        return  "SELECT * FROM (SELECT nid,ROWNUM as rnum,data_id,group_id,tenant_id,app_name,src_ip,src_user,op_type,gmt_create,gmt_modified FROM his_config_info "
                + "WHERE data_id = ? AND group_id = ? AND tenant_id = ? ORDER BY nid DESC ) where rnum >= " + offset + " and " + limit + " >= rnum ";
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }
}
  1.8.TenantCapacityMapperByOracle

public class TenantCapacityMapperByOracle extends AbstractTenantCapacityMapperCommon {


    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }

}
  1.9.TenantInfoMapperByOracle

public class TenantInfoMapperByOracle extends AbstractMapper implements TenantInfoMapper {

    @Override
    public String getTableName() {
        return TableConstant.TENANT_INFO;
    }

    @Override
    public String getDataSource() {
        return DataSourceConstantExt.ORACLE;
    }

}
   2.ddl

create table CONFIG_INFO
(
    ID                 NUMBER(20)         not null
        primary key,
    DATA_ID            VARCHAR2(255 char) not null,
    GROUP_ID           VARCHAR2(128 char),
    CONTENT            CLOB               not null,
    MD5                VARCHAR2(32 char),
    GMT_CREATE         DATE               not null,
    GMT_MODIFIED       DATE               not null,
    SRC_USER           CLOB,
    SRC_IP             VARCHAR2(20 char),
    APP_NAME           VARCHAR2(128 char) default NULL,
    TENANT_ID          VARCHAR2(128 char) default '',
    C_DESC             VARCHAR2(256 char) default NULL,
    C_USE              VARCHAR2(64 char)  default NULL,
    EFFECT             VARCHAR2(64 char)  default NULL,
    TYPE               VARCHAR2(64 char)  default NULL,
    C_SCHEMA           CLOB,
    ENCRYPTED_DATA_KEY CLOB               null
)
;

create unique index UK_CONFIGINFO_DATAGROUPTENANT
    on CONFIG_INFO (DATA_ID, GROUP_ID, TENANT_ID)
;

create table CONFIG_INFO_AGGR
(
    ID           NUMBER(20)         not null
        primary key,
    DATA_ID      VARCHAR2(255 char) not null,
    GROUP_ID     VARCHAR2(128 char) not null,
    DATUM_ID     VARCHAR2(255 char) not null,
    CONTENT      CLOB               not null,
    GMT_MODIFIED DATE               not null,
    APP_NAME     VARCHAR2(128 char) default NULL,
    TENANT_ID    VARCHAR2(128 char) default ''
)
;

create unique index UK_C_DATAGROUPTENANTDATUM
    on CONFIG_INFO_AGGR (DATA_ID, GROUP_ID, TENANT_ID, DATUM_ID)
;

create table CONFIG_INFO_BETA
(
    ID                 NUMBER(20)         not null
        primary key,
    DATA_ID            VARCHAR2(255 char) not null,
    GROUP_ID           VARCHAR2(128 char) not null,
    APP_NAME           VARCHAR2(128 char)  default NULL,
    CONTENT            CLOB               not null,
    BETA_IPS           VARCHAR2(1024 char) default NULL,
    MD5                VARCHAR2(32 char)   default NULL,
    GMT_CREATE         DATE               not null,
    GMT_MODIFIED       DATE               not null,
    SRC_USER           CLOB,
    SRC_IP             VARCHAR2(20 char)   default NULL,
    TENANT_ID          VARCHAR2(128 char)  default '',
    ENCRYPTED_DATA_KEY CLOB               not null
)
;

create unique index UK_C_DATAGROUPTENANT
    on CONFIG_INFO_BETA (DATA_ID, GROUP_ID, TENANT_ID)
;

create table CONFIG_INFO_TAG
(
    ID           NUMBER(20)         not null
        primary key,
    DATA_ID      VARCHAR2(255 char) not null,
    GROUP_ID     VARCHAR2(128 char) not null,
    TENANT_ID    VARCHAR2(128 char) default '',
    TAG_ID       VARCHAR2(128 char) not null,
    APP_NAME     VARCHAR2(128 char) default NULL,
    CONTENT      CLOB               not null,
    MD5          VARCHAR2(32 char)  default NULL,
    GMT_CREATE   DATE               not null,
    GMT_MODIFIED DATE               not null,
    SRC_USER     CLOB,
    SRC_IP       VARCHAR2(20 char)  default NULL
)
;

create unique index UK_C_DATAGROUPTENANTTAG
    on CONFIG_INFO_TAG (DATA_ID, GROUP_ID, TENANT_ID, TAG_ID)
;

create table CONFIG_TAGS_RELATION
(
    ID        NUMBER(20)         not null,
    TAG_NAME  VARCHAR2(128 char) not null,
    TAG_TYPE  VARCHAR2(64 char)  default NULL,
    DATA_ID   VARCHAR2(255 char) not null,
    GROUP_ID  VARCHAR2(128 char) not null,
    TENANT_ID VARCHAR2(128 char) default '',
    NID       NUMBER(20)         not null
        primary key
)
;

create unique index UK_C_CONFIGIDTAG
    on CONFIG_TAGS_RELATION (ID, TAG_NAME, TAG_TYPE)
;

create index IDX_TENANT_ID
    on CONFIG_TAGS_RELATION (TENANT_ID)
;

create table GROUP_CAPACITY
(
    ID                NUMBER(20) not null
        primary key,
    GROUP_ID          VARCHAR2(128 char) default '',
    QUOTA             NUMBER(10)         default '0',
    USAGE             NUMBER(10)         default '0',
    MAX_SIZE          NUMBER(10)         default '0',
    MAX_AGGR_COUNT    NUMBER(10)         default '0',
    MAX_AGGR_SIZE     NUMBER(10)         default '0',
    MAX_HISTORY_COUNT NUMBER(10)         default '0',
    GMT_CREATE        DATE       not null,
    GMT_MODIFIED      DATE       not null
)
;

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 unique index UK_GROUP_ID
    on GROUP_CAPACITY (GROUP_ID)
;

create table HIS_CONFIG_INFO
(
    ID                 NUMBER             not null,
    NID                NUMBER(20)         not null
        primary key,
    DATA_ID            VARCHAR2(255 char) not null,
    GROUP_ID           VARCHAR2(128 char) not null,
    APP_NAME           VARCHAR2(128 char) default NULL,
    CONTENT            CLOB               not null,
    MD5                VARCHAR2(32 char)  default NULL,
    GMT_CREATE         DATE               not null,
    GMT_MODIFIED       DATE               not null,
    SRC_USER           CLOB,
    SRC_IP             VARCHAR2(20 char)  default NULL,
    OP_TYPE            CHAR(10 char)      default NULL,
    TENANT_ID          VARCHAR2(128 char) default '',
    ENCRYPTED_DATA_KEY CLOB                null
)
;

create index IDX_GMT_CREATE
    on HIS_CONFIG_INFO (GMT_CREATE)
;

create index IDX_GMT_MODIFIED
    on HIS_CONFIG_INFO (GMT_MODIFIED)
;

create index IDX_DID
    on HIS_CONFIG_INFO (DATA_ID)
;

create table TENANT_CAPACITY
(
    ID                NUMBER(20) not null
        primary key,
    TENANT_ID         VARCHAR2(128) default '',
    QUOTA             NUMBER(10)    default '0',
    USAGE             NUMBER(10)    default '0',
    MAX_SIZE          NUMBER(10)    default '0',
    MAX_AGGR_COUNT    NUMBER(10)    default '0',
    MAX_AGGR_SIZE     NUMBER(10)    default '0',
    MAX_HISTORY_COUNT NUMBER(10)    default '0',
    GMT_CREATE        DATE       not null,
    GMT_MODIFIED      DATE       not null
)
;

create unique index UK_TENANT_ID
    on TENANT_CAPACITY (TENANT_ID)
;

create table TENANT_INFO
(
    ID            NUMBER(20)    not null
        primary key,
    KP            VARCHAR2(128) not null,
    TENANT_ID     VARCHAR2(128 char) default '',
    TENANT_NAME   VARCHAR2(128 char) default '',
    TENANT_DESC   VARCHAR2(256 char) default NULL,
    CREATE_SOURCE VARCHAR2(32 char)  default NULL,
    GMT_CREATE    NUMBER(20)    not null,
    GMT_MODIFIED  NUMBER(20)    not null
)
;

create unique index UK_TENANT_INFO_KPTENANTID
    on TENANT_INFO (KP, TENANT_ID)
;

create table USERS
(
    USERNAME VARCHAR2(50 char)  not null
        primary key,
    PASSWORD VARCHAR2(500 char) not null,
    ENABLED  CHAR               not null
)
;

create table ROLES
(
    USERNAME VARCHAR2(50 char) not null,
    ROLE     VARCHAR2(50 char) not null,
    constraint UK_USERNAME_ROLE
        unique (USERNAME, ROLE)
)
;

create table PERMISSIONS
(
    ROLE       VARCHAR2(50 char)  not null,
    RESOURCES VARCHAR2(512 char) not null,
    ACTION     VARCHAR2(8 char)   not null,
    constraint UK_ROLE_PERMISSION
        unique (ROLE, RESOURCES, ACTION)
)
;

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

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

create sequence SEQ_CONFIG_INFO
    maxvalue 999999999999
;

create sequence SEQ_CONFIG_INFO_AGGR
    maxvalue 999999999999
;

create sequence SEQ_CONFIG_INFO_BETA
    maxvalue 999999999999
;

create sequence SEQ_CONFIG_INFO_TAG
    maxvalue 999999999999
;

create sequence SEQ_CONFIG_TAGS_RELATION
    maxvalue 999999999999
;

create sequence SEQ_CAPACITY_ENTITY
    maxvalue 999999999999
;

create sequence SEQ_HIS_CONFIG_INFO
    maxvalue 999999999999
;

create sequence SEQ_TENANT_INFO
    maxvalue 999999999999
;
  3.pom

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.2</version>
        </dependency>
   4.nacos-server的application.properties配置

db.pool.config.driverClassName=xx
db.pool.config.schema=xx
spring.sql.init.platform=oracle
db.url.0=xx
db.user.0=xx
db.password.0=xx
db.pool.config.connectionTestQuery=select 1 from dual
### Nacos 2.4.3 版本配置 Oracle 数据库教程 #### 准备工作 确保环境满足以下条件: - 已安装 JDK 1.8 或更高版本[^3]。 - 下载并解压 Nacos 2.4.3 的二进制包或通过 Docker 构建镜像。 #### 修改 `application.properties` 文件 编辑位于 `${nacos.home}/conf/application.properties` 中的文件,添加如下配置项来指定连接至 Oracle 数据库的信息: ```properties spring.datasource.platform=oracle db.num=1 db.url.0=jdbc:oracle:thin:@//<host>:<port>/<service_name> db.user=<username> db.password=<password> ``` 其中 `<host>` 是数据库服务器地址;`<port>` 默认为 1521;`<service_name>` 表示服务名而非 SID;`<username>` 和 `<password>` 则分别为访问该数据库所需的用户名和密码。 对于高可用场景下多数据源的支持,则可以增加更多的 db 数量,并依次定义对应的 URL、用户及密码等参数。例如设置两个节点的数据源时可参照上述模板继续追加第二组配置信息即可完成相应调整。 #### 创建表结构脚本执行 由于官方并未直接给出针对 Oracle 的初始化 SQL 脚本,在实际操作过程中可能需要依据 MySQL 或其他关系型数据库中的 DDL (Data Definition Language) 来转换成适用于目标 RDBMS 的语法形式手动创建必要的表格与索引等内容。通常情况下可以从 GitHub 上找到社区贡献者分享过的类似资源作为参考来进行这项工作。 #### 启动 Nacos Server 当所有的前置准备工作都完成后就可以正常启动 Nacos server 实例了。如果是基于命令行的方式则只需切换到 bin 目录下运行 startup.sh 即可开启应用服务端口监听等待客户端请求接入处理业务逻辑流程。 #### 注意事项 - **字符集编码**:确认所使用的 Oracle 数据库实例采用 UTF-8 编码方式存储字符串类型字段值以避免乱码现象发生影响正常使用体验效果不佳等问题出现; - **JDBC Driver**:确保项目依赖中包含了最新版 ojdbc jar 包以便能够顺利建立稳定可靠的网络通信链路实现高效交互操作功能特性发挥最大效能价值所在之处。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值