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
相关文章:
nacos适配SqlServer、Oracle
继上文《nacos适配达梦、瀚高、人大金仓数据库及部分源码探究 》后补充nacos适配SqlServer、Oracle的贴码,主要区别是SqlServer、Oracle的分页SQL有点不一样,做个记录; SqlServer的分页有三种实现方式:offset /fetch next、利用ma…...

力扣:74. 搜索二维矩阵(Python3)
题目: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返…...

CPU、MCU、MPU、SOC、SOCPC、概念解释之在嵌入式领域常听到的名词含义
CPU、MCU、MPU、SOC等几个在嵌入式领域学习过程中会涉及到的几个名词。我们来学习一下,资料从网上搜集的,有错的地方可以指出。。。 CPU、MCU、MPU、SOC、SOCPC、 1. CPU2. MPU3.MCUMPU和MCU的区别:4.SOC5. SoPC 1. CPU CPU,即中…...

每日两题 111二叉树的最小深度 112路径总和(递归)
111 题目 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:2示例 2&#x…...

实训笔记8.24
实训笔记8.24 8.24笔记一、Sqoop数据迁移工具1.1 Sqoop的基本概念1.2 Sqoop的基本操作1.2.1 命令语法1.2.2 list-databases1.2.3 list-tables1.2.3 eval1.2.4 import1.2.5 export1.2.6 导入 二、Flume日志采集工具2.1 数据采集的问题2.2 数据采集一般使用的技术2.3 扩展&#x…...

Linux下的系统编程——系统调用(五)
前言: 由操作系统实现并提供给外部应用程序的编程接口。(Application Programming Interface,API)。系统调用就是应用程序同系统之间数据交互的桥梁。 open/close函数 1.open函数: (1)int open(char *pathname, int flags) …...

动物体外受精手术VR模拟仿真培训系统保证学生及标本的安全
奶牛是养殖业主要的资源,因此保证奶牛的健康对养殖业的成功和可持续发展具有重要已用,奶牛有一些常见易发病,一旦处理不当,对奶牛业都会造成较大的经济损失,传统的奶牛手术培训实操难度大、风险高且花费大,…...

微信小程序|步骤条
步骤条是现代用户界面设计中常见的元素之一,它能够引导用户按照预定顺序完成一系列任务或步骤。在小程序中,实现步骤条可以为用户提供更好的导航和引导,使用户体验更加流畅和直观。本文将介绍如何在小程序中实现步骤条,并逐步展示实现的过程和关键技巧 目录 步骤条的作用及…...
如何才能设计出“好的”测试用例?
软件测试用例的设计质量直接影响到测试的完整性、有效性以及自动化测试的实施效果,是软件测试成功的重要保证,良好的软件测试用例对于提高测试的有效性和效率至关重要。那大家知道好的测试用例该怎么写吗?应该从哪几个方面来撰写呢࿱…...

DirectExchange直连交换机
目录 一、简介 二、使用步骤 三、demo 父pom文件 pom文件 配置文件 config 消费者 生产者 测试 一、简介 直连型交换机,根据消息携带的路由键将消息投递给对应队列。 大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由…...
Shell 编程:探索 Shell 的基本概念与用法
目录 Shell 简介 Shell 脚本 Shell 脚本运行 Shell 变量 1、创建变量和赋值 2、引用变量 3、修改变量的值 4、只读变量 5、删除变量 6、环境变量 Shell 字符串操作 1、拼接字符串 2、字符串长度 3、字符串截取 Shell 数组 1、创建数组 2、访问数组元素 shell …...

【Git分支操作---讲解二】
Git分支操作---讲解二 查看分支创建分支切换分支修改分支切换分支合并分支合并分支【冲突】(只会修改主分支不会修改其他分支)什么时候会有冲突? 查看分支 创建分支 切换分支 修改分支 切换分支 合并分支 合并分支【冲突】(只会修改主分支不会修改其他分支) 什么时…...

vue2+qrcodejs2+clipboard——实现二维码展示+下载+复制到剪切板——基础积累
最近在写后台管理系统时,遇到一个需求就是要实现二维码的展示下载复制到剪切板。 效果图如下: 1.二维码展示下载功能——qrcodejs20.0.2 我是安装的qrcodejs20.0.2,指定了具体的版本号,也可以安装默认的当前稳定版本࿰…...

【PHP】echo 输出数组报Array to string conversion解决办法
代码: <?PHP echo "Hello World!";$demoName array("kexuexiong","xiong");echo "<pre>";var_dump($demoName);echo $demoName; print_r($demoName);echo "</pre>"; ?>输出结果࿱…...
Arduino驱动MiCS-4514气体传感器(气体传感器篇)
目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序...
marked在vue项目中改变超链接跳转方式和图片放大预览
marked在vue项目中改变超链接跳转方式和图片放大预览 这里我是另起一个js文件对marked的配置做了修改,参考如下 import marked from marked let renderer new marked.Renderer() const linkRenderer renderer.link const imgRenderer renderer.image // 超链接…...

leetcode485. 最大连续 1 的个数
思路:【双指针】 left左边界,right往右跑遇到0,则计算该长度。并更新cnt(最大连续1个数)。 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int left 0, right 0;int cnt 0;…...
linux 源代码编译
源代码编译 有时候会在linux上下载源码包,然后进行编译成可执行的文件,这个过程需要经过configure、make、make install、make clean四个步骤 configure 为这个程序在当前的操作系统环境下选择合适的编译器和环境参数来编译该代码 make 对程序代码进行编…...
C语言日常刷题 1
文章目录 题目答案与解析1234.5.6. 题目 1、执行下面程序,正确的输出是( ) int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf(“%d,%d\n”,x, y); return 0; } A: 5,7 B: 7,5 C: 3,8 D: 8…...

es和数据库同步方案
5.5 课程信息索引同步 5.5.1 技术方案 通过向索引中添加课程信息最终实现了课程的搜索,我们发现课程信息是先保存在关系数据库中,而后再写入索引,这个过程是将关系数据中的数据同步到elasticsearch索引中的过程,可以简单成为索引…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...