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 {@Overridepublic 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";}@Overridepublic String getDataSource() {return DataSourceConstantExt.SQLSERVER;}}
   1.2.ConfigInfoBetaMapperBySqlServer

public class ConfigInfoBetaMapperBySqlServer extends AbstractConfigInfoBetaMapperCommon {@Overridepublic 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 ";}@Overridepublic 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";@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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  ";}@Overridepublic 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 ";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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 ";}@Overridepublic 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";}@Overridepublic String getDataSource() {return DataSourceConstantExt.SQLSERVER;}}
  1.4.ConfigInfoTagMapperBySqlServer

public class ConfigInfoTagMapperBySqlServer extends AbstractConfigInfoTagMapperCommon {@Overridepublic 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  ";}@Overridepublic String getDataSource() {return DataSourceConstantExt.SQLSERVER;}
}
  1.5.ConfigTagsRelationMapperBySqlServer

public class ConfigTagsRelationMapperBySqlServer extends AbstractConfigTagsRelationMapperCommon {@Overridepublic 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";}@Overridepublic 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";}@Overridepublic String getDataSource() {return DataSourceConstantExt.SQLSERVER;}
}
  1.6.GroupCapacityMapperBySqlServer

public class GroupCapacityMapperBySqlServer extends AbstractGroupCapacityMapperCommon {@Overridepublic 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";}@Overridepublic String getDataSource() {return DataSourceConstantExt.SQLSERVER;}
}
  1.8.TenantCapacityMapperBySqlServer

public class TenantCapacityMapperBySqlServer extends AbstractTenantCapacityMapperCommon {@Overridepublic String getDataSource() {return DataSourceConstantExt.SQLSERVER;}}
  1.9.TenantInfoMapperBySqlServer

public class TenantInfoMapperBySqlServer extends AbstractMapper implements TenantInfoMapper {@Overridepublic String getTableName() {return TableConstant.TENANT_INFO;}@Overridepublic 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 {@Overridepublic 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";}@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}
}
   1.2.ConfigInfoBetaMapperByOracle

public class ConfigInfoBetaMapperByOracle extends AbstractConfigInfoBetaMapperCommon {@Overridepublic 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 ";}@Overridepublic 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";@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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  ";}@Overridepublic 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 ";}@Overridepublic 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 ";}@Overridepublic 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";}@Overridepublic 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";}@Overridepublic 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 ";}@Overridepublic 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 ";}@Overridepublic 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 ";}@Overridepublic 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 ";}@Overridepublic 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 ";}@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}}
  1.4.ConfigInfoTagMapperByOracle

public class ConfigInfoTagMapperByOracle extends AbstractConfigInfoTagMapperCommon {@Overridepublic 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  ";}@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}
}
  1.5.ConfigTagsRelationMapperByOracle

public class ConfigTagsRelationMapperByOracle extends AbstractConfigTagsRelationMapperCommon {@Overridepublic 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 ";}@Overridepublic 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 ";}@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}
}
  1.6.GroupCapacityMapperByOracle

public class GroupCapacityMapperByOracle extends AbstractGroupCapacityMapperCommon {@Overridepublic 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 ";}@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}
}
  1.8.TenantCapacityMapperByOracle

public class TenantCapacityMapperByOracle extends AbstractTenantCapacityMapperCommon {@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}}
  1.9.TenantInfoMapperByOracle

public class TenantInfoMapperByOracle extends AbstractMapper implements TenantInfoMapper {@Overridepublic String getTableName() {return TableConstant.TENANT_INFO;}@Overridepublic String getDataSource() {return DataSourceConstantExt.ORACLE;}}

   2.ddl

create table CONFIG_INFO
(ID                 NUMBER(20)         not nullprimary 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_DATAGROUPTENANTon CONFIG_INFO (DATA_ID, GROUP_ID, TENANT_ID)
;create table CONFIG_INFO_AGGR
(ID           NUMBER(20)         not nullprimary 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_DATAGROUPTENANTDATUMon CONFIG_INFO_AGGR (DATA_ID, GROUP_ID, TENANT_ID, DATUM_ID)
;create table CONFIG_INFO_BETA
(ID                 NUMBER(20)         not nullprimary 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_DATAGROUPTENANTon CONFIG_INFO_BETA (DATA_ID, GROUP_ID, TENANT_ID)
;create table CONFIG_INFO_TAG
(ID           NUMBER(20)         not nullprimary 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_DATAGROUPTENANTTAGon 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 nullprimary key
)
;create unique index UK_C_CONFIGIDTAGon CONFIG_TAGS_RELATION (ID, TAG_NAME, TAG_TYPE)
;create index IDX_TENANT_IDon CONFIG_TAGS_RELATION (TENANT_ID)
;create table GROUP_CAPACITY
(ID                NUMBER(20) not nullprimary 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_IDon GROUP_CAPACITY (GROUP_ID)
;create table HIS_CONFIG_INFO
(ID                 NUMBER             not null,NID                NUMBER(20)         not nullprimary 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_CREATEon HIS_CONFIG_INFO (GMT_CREATE)
;create index IDX_GMT_MODIFIEDon HIS_CONFIG_INFO (GMT_MODIFIED)
;create index IDX_DIDon HIS_CONFIG_INFO (DATA_ID)
;create table TENANT_CAPACITY
(ID                NUMBER(20) not nullprimary 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_IDon TENANT_CAPACITY (TENANT_ID)
;create table TENANT_INFO
(ID            NUMBER(20)    not nullprimary 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_KPTENANTIDon TENANT_INFO (KP, TENANT_ID)
;create table USERS
(USERNAME VARCHAR2(50 char)  not nullprimary 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_ROLEunique (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_PERMISSIONunique (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_INFOmaxvalue 999999999999
;create sequence SEQ_CONFIG_INFO_AGGRmaxvalue 999999999999
;create sequence SEQ_CONFIG_INFO_BETAmaxvalue 999999999999
;create sequence SEQ_CONFIG_INFO_TAGmaxvalue 999999999999
;create sequence SEQ_CONFIG_TAGS_RELATIONmaxvalue 999999999999
;create sequence SEQ_CAPACITY_ENTITYmaxvalue 999999999999
;create sequence SEQ_HIS_CONFIG_INFOmaxvalue 999999999999
;create sequence SEQ_TENANT_INFOmaxvalue 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

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

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

相关文章

JAVA-编程基础-10-集合

Lison <dreamlison163.com>, v1.0.0, 2023.04.23 JAVA-编程基础-10-集合 文章目录 JAVA-编程基础-10-集合List、Set、Map、队列全面解析ListArrayList创建ArrayList 向ArrayList中添加元素 List、Set、Map、队列全面解析 Java 集合框架可以分为两条大的支线&#xff1a;…

uniapp 项目实践总结(一)uniapp 框架知识总结

导语&#xff1a;最近开发了一个基于 uniapp 框架的项目&#xff0c;有一些感触和体会&#xff0c;所以想记录以下一些技术和经验&#xff0c;在这里做一个系列总结&#xff0c;算是对自己做一个交代吧。 目录 简介全局文件全局组件常用 API条件编译插件开发 简介 uniapp 是…

【C++】开源:Box2D动力学库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Box2D动力学库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

Zenity 简介

什么使 Zenity Zenity 是一个开源的命令行工具&#xff0c;它提供了一种简单的方式来创建图形化的用户界面&#xff08;GUI&#xff09;对话框&#xff0c;以与用户进行交互。它基于 GTK 库&#xff0c;可以在 Linux 和其他 UNIX-like 系统上使用。 Zenity 可以通过命令行或脚…

Unity Alembic闪烁问题

最近在做项目时&#xff0c;发现Clo3D导出的服装abc动画&#xff0c;导入到Unity中后(已提前导入Alembic插件)&#xff0c;运行时屏幕会闪烁(变黑)。 经过几轮测试&#xff0c;发现是切线的问题。解决办法很简单。将abc文件上的Tangents属性值改为None即可。

【自适应稀疏度量方法和RQAM】疏度测量、RQAM特征、AWSPT和基于AWSPT的稀疏度测量研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

“之江创客”走进美洲 助推电商国际合作交流

“之江创客” 2023全球电子商务 创业创新大赛 美洲赛区决赛 当地时间8月24日下午&#xff0c;“之江创客”2023全球电子商务创业创新大赛美洲赛区决赛在墨西哥蒙特雷科技大学墨西哥城校区圆满落幕。浙江省商务厅党组成员、副厅长张钱江作视频致辞&#xff0c;蒙特雷科技大学…

深度对话:从底层看Sui设计理念及网络规模扩展

近日&#xff0c;我们采访了George Danezis以了解Sui的交易处理系统如何促成高性能网络。他是Mysten Labs的联合创始人和首席科学家&#xff08;Sui的最初贡献者&#xff09;&#xff0c;也是伦敦大学学院&#xff08;University College London&#xff0c;UCL&#xff09;安全…

849. 到最近的人的最大距离(JavaScript)849. Maximize Distance to Closest Person

给你一个数组 seats 表示一排座位&#xff0c;其中 seats[i] 1 代表有人坐在第 i 个座位上&#xff0c;seats[i] 0 代表座位 i 上是空的&#xff08;下标从 0 开始&#xff09;。 至少有一个空座位&#xff0c;且至少有一人已经坐在座位上。 亚历克斯希望坐在一个能够使他与…

Qt xml解析之QXmlStreamReader

文章目录 背景QXmlStreamReader简单介绍使用QXmlStreamReader添加头文件<QXmlStreamReader>toString()toInt()完整代码 背景 项目中遇到需要解析某个方法返回的xml字符串&#xff0c;奈何C/C中没有原生的方法可供调用&#xff0c;只能使用第三方库&#xff0c;搜了一圈资…

基于闪电连接过程算法优化的BP神经网络(预测应用) - 附代码

基于闪电连接过程算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于闪电连接过程算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.闪电连接过程优化BP神经网络2.1 BP神经网络参数设置2.2 闪电连接过程算法应用 4.测试结…

OpenCV实现摄像头图像分类(Python版)

先安装MMEdu库&#xff01; MMEdu安装&#xff1a;https://blog.csdn.net/zyl_coder/article/details/132483865 下面的代码请在Jupyter上运行&#xff0c;并自己准备数据集。若模型还未训练&#xff0c;请先在本地训练完模型后再进行模型推理。 import cv2 capture cv2.Vi…

js流式计算大文件sha256

小文件计算sha256&#xff1a; import sha256 from crypto-js/256console.log(sha256(message));大文件流式计算sha256 超大文件的sha256&#xff0c;不能直接用上面方法sha256(file)&#xff0c;这会让用户等待非常久&#xff0c;所以需要流式计算&#xff0c;原理大概就是把…

linux搭建minIO对象存储服务,springBoot整合

minIO 服务搭建 1. 创建安装目录 mkdir -p /usr/local/minio2. 进入安装目录 cd /usr/local/minio3.下载安装包 (wget 如果下载太慢,可以手动下载并上传安装包) wget https://dl.minio.io/server/minio/release/linux-amd64/minio4.创建数据存储文件夹 mkdir -p /usr/loca…

恒流电路的三种设计方案

作为硬件研发工程师相信对恒流电路不会陌生&#xff0c;本文介绍下三种恒流电路的原理图。 三极管恒流电路 三极管恒流电路 三极管的恒流电路&#xff0c;主要是利用Q2三极管的基级导通电压为0.6~0.7V这个特性&#xff1b;当Q2三极管导通&#xff0c;Q1三极管基级电压被拉低而…

大数据课程K12——Spark的MLlib概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的MLlib概念; ⚪ 掌握Spark的MLlib基本数据模型; ⚪ 掌握Spark的MLlib统计量基础; 一、Spark MLlib介绍 1. 概述 MLlib是Apache Spark的可迭代机器学习库。 2. 易于使用 …

LVS集群和分布式概念

LVS 一.集群和分布式概念 1.1 集群 在计算机领域&#xff0c;集群早在 1960 年就出现&#xff0c;随着互联网和计算机相关技术的发展&#xff0c;现在 集群这一技术已经在各大互联网公司普及。 1.1.1 集群概念 计算机集群指一组通过计算机网络连接的计算机&#xff0c;它们…

【优选算法】—— 二分查找

序言&#xff1a; 本期&#xff0c;我们将要介绍的是有关 二分查找算法 并通过题目帮组大家更好的理解&#xff01; 目录 &#xff08;一&#xff09;基本介绍 1、基本思想 2、解题流程 3、复杂度以及注意事项 &#xff08;二&#xff09;题目讲解 1、在排序数组中查找…

Sql Server导出数据库到另一个数据库

1.打开sql server数据库&#xff0c;连接到服务器后&#xff0c;找到需要导出的数据库&#xff0c;右击后选择 任务->导出数据。 2.点击 下一步。 3.身份验证可以使用SQL Server身份验证&#xff0c;就是当时建立连接时的用户名和密码&#xff0c;数据库名称使用默认的&…

大漠插件7.2336

工具名称:大漠插件7.2336 更新时间2023-08-28更新内容/v7.23361. YOLO综合工具标记逻辑优化. 更加的方便2. YOLO综合工具增加了默认类. 对于多个同类可以不用每次都进行选择.3. YOLO综合工具增加可以对模型的输入大小进行修改4. YOLO的dmx格式变更.新老版本不混用. 新的dmx格式…