资讯动态

nacos适配达梦、瀚高、人大金仓数据库及部分源码探究

发布时间:2026/10/21 1:11:16 来源:尧图企业网站定制
源码仓库:Gitee· GitHub一.插件实现1.插件目录结构2.pom依赖dependency groupIdcom.alibaba.nacos/groupId artifactIdnacos-datasource-plugin/artifactId version2.2.4/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-jdbc/artifactId version3.1.3.RELEASE/version /dependency !-- 达梦 -- dependency groupIdcom.dameng/groupId artifactIdDm8JdbcDriver18/artifactId version8.1.1.49/version /dependency !-- 瀚高 -- dependency groupIdcom.highgo/groupId artifactIdHgdbJdbc/artifactId version6.2.2/version /dependency !--人大金仓 -- dependency groupIdcom.kingbase/groupId artifactIdkingbase8/artifactId version8.2.0/version /dependency3.代码实现3.1.DataSourceConstantpublic class DataSourceConstant { public static final String MYSQL = "mysql"; public static final String DERBY = "derby"; public static final String DM="dm"; public static final String HIGHGO="highgo"; public static final String KINGBASE="kingbase"; }3.2.公共方法3.2.1.AbstractConfigInfoAggrMapperCommonpackage com.alibaba.nacos.plugin.datasource.impl.common; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.ConfigInfoAggrMapper; public abstract class AbstractConfigInfoAggrMapperCommon extends AbstractMapper implements ConfigInfoAggrMapper { @Override public String batchRemoveAggr(int datumSize) { final StringBuilder placeholderString = new StringBuilder(); for (int i = 0; i datumSize; i++) { if (i != 0) { placeholderString.append(", "); } placeholderString.append('?'); } return "DELETE FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND tenant_id = ? AND datum_id IN (" + placeholderString + ")"; } @Override public String aggrConfigInfoCount(int size, boolean isIn) { StringBuilder sql = new StringBuilder( "SELECT count(*) FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND tenant_id = ? AND datum_id"); if (isIn) { sql.append(" IN ("); } else { sql.append(" NOT IN ("); } for (int i = 0; i size; i++) { if (i 0) { sql.append(", "); } sql.append('?'); } sql.append(')'); return sql.toString(); } public String findConfigInfoAggrIsOrdered() { 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"; } 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 LIMIT " + pageSize + " OFFSET " + startRow; } public String findAllAggrGroupByDistinct() { return "SELECT DISTINCT data_id, group_id, tenant_id FROM config_info_aggr"; } public String getTableName() { return TableConstant.CONFIG_INFO_AGGR; } }3.2.2.AbstractConfigInfoBetaMapperCommonpackage com.alibaba.nacos.plugin.datasource.impl.common; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.ConfigInfoBetaMapper; public abstract class AbstractConfigInfoBetaMapperCommon extends AbstractMapper implements ConfigInfoBetaMapper { public String updateConfigInfo4BetaCas() { return "UPDATE config_info_beta SET content = ?,md5 = ?,beta_ips = ?,src_ip = ?,src_user = ?,gmt_modified = ?,app_name = ? " + "WHERE data_id = ? AND group_id = ? AND tenant_id = ? AND (md5 = ? or md5 is null or md5 = '')"; } 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 LIMIT " + pageSize + " OFFSET " + startRow + " )" + " g, config_info_beta t WHERE g.id = t.id "; } public String getTableName() { return TableConstant.CONFIG_INFO_BETA; } }3.2.3.AbstractConfigInfoTagMapperCommonpackage com.alibaba.nacos.plugin.datasource.impl.common; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.ConfigInfoTagMapper; public abstract class AbstractConfigInfoTagMapperCommon extends AbstractMapper implements ConfigInfoTagMapper { public String updateConfigInfo4TagCas() { return "UPDATE config_info_tag SET content = ?, md5 = ?, src_ip = ?,src_user = ?,gmt_modified = ?,app_name = ? " + "WHERE data_id = ? AND group_id = ? AND tenant_id = ? AND tag_id = ? AND (md5 = ? OR md5 IS NULL OR md5 = '')"; } 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 LIMIT " + pageSize + " OFFSET " + startRow + " ) " + "g, config_info_tag t WHERE g.id = t.id "; } public String getTableName() { return TableConstant.CONFIG_INFO_TAG; } }3.2.4.AbstractConfigTagsRelationMapperCommonpackage com.alibaba.nacos.plugin.datasource.impl.common; import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.ConfigTagsRelationMapper; import java.util.Map; public abstract class AbstractConfigTagsRelationMapperCommon extends AbstractMapper implements ConfigTagsRelationMapper { public String findConfigInfo4PageCountRows(final MapString, String params, final int tagSize) { 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 sqlCount = "SELECT count(*) 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 sqlCount + where; } public String findConfigInfo4PageFetchRows(MapString, 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 + " LIMIT " + pageSize + " OFFSET " + startRow; } public String findConfigInfoLike4PageCountRows(final MapString, String params, int tagSize) { 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 sqlCountRows = "SELECT count(*) 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 sqlCountRows + where; } public String findConfigInfoLike4PageFetchRows(final MapString, 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 + " LIMIT " + startRow + "," + pageSize; } public String getTableName() { return TableConstant.CONFIG_TAGS_RELATION; } }3.2.5.AbstractGroupCapacityMapperCommonpackage com.alibaba.nacos.plugin.datasource.impl.common; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.GroupCapacityMapper; public abstract class AbstractGroupCapacityMapperCommon extends AbstractMapper implements GroupCapacityMapper { public String insertIntoSelect() { return "INSERT INTO group_capacity (group_id, quota, `usage`, `max_size`, max_aggr_count, max_aggr_size,gmt_create," + " gmt_modified) SELECT ?, ?, count(*), ?, ?, ?, ?, ? FROM config_info"; } public String insertIntoSelectByWhere() { return "INSERT INTO group_capacity (group_id, quota,`usage`, `max_size`, max_aggr_count, max_aggr_size, gmt_create," + " gmt_modified) SELECT ?, ?, count(*), ?, ?, ?, ?, ? FROM config_info WHERE group_id=? AND tenant_id = ''"; } public String incrementUsageByWhereQuotaEqualZero() { return "UPDATE group_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE group_id = ? AND `usage` ? AND quota = 0"; } public String incrementUsageByWhereQuotaNotEqualZero() { return "UPDATE group_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE group_id = ? AND `usage` quota AND quota != 0"; } public String incrementUsageByWhere() { return "UPDATE group_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE group_id = ?"; } public String decrementUsageByWhere() { return "UPDATE group_capacity SET `usage` = `usage` - 1, gmt_modified = ? WHERE group_id = ? AND `usage` 0"; } public String updateUsage() { return "UPDATE group_capacity SET `usage` = (SELECT count(*) FROM config_info), gmt_modified = ? WHERE group_id = ?"; } public String updateUsageByWhere() { return "UPDATE group_capacity SET `usage` = (SELECT count(*) FROM config_info WHERE group_id=? AND tenant_id = '')," + " gmt_modified = ? WHERE group_id= ?"; } public String selectGroupInfoBySize() { return "SELECT id, group_id FROM group_capacity WHERE id ? LIMIT ?"; } public String getTableName() { return TableConstant.GROUP_CAPACITY; } }3.2.6.AbstractHistoryConfigInfoMapperCommonpackage com.alibaba.nacos.plugin.datasource.impl.common; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.HistoryConfigInfoMapper; public abstract class AbstractHistoryConfigInfoMapperCommon extends AbstractMapper implements HistoryConfigInfoMapper { public String removeConfigHistory() { return "DELETE FROM his_config_info WHERE gmt_modified ? LIMIT ?"; } public String findConfigHistoryCountByTime() { return "SELECT count(*) FROM his_config_info WHERE gmt_modified ?"; } public String findDeletedConfig() { return "SELECT DISTINCT data_id, group_id, tenant_id FROM his_config_info WHERE op_type = 'D' AND gmt_modified = ? AND gmt_modified = ?"; } public String findConfigHistoryFetchRows() { 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"; } public String detailPreviousConfigHistory() { return "SELECT nid,data_id,group_id,tenant_id,app_name,content,md5,src_user,src_ip,op_type,gmt_create,gmt_modified " + "FROM his_config_info WHERE nid = (SELECT max(nid) FROM his_config_info WHERE id = ?) "; } public String pageFindConfigHistoryFetch

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑