Nacos 2.2.0支持postgresql数据库
1源码修改
1.1根pom增加postgresql依赖
<postgresql.version>42.5.1</postgresql.version> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql.version}</version> </dependency>
1.2 config模块pom文件增加依赖
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency>
1.3 以下操作在plugin模块
/plugin/datasource/src/main/resources/META-INF/services 下增加以下数据
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoAggrMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoBetaMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoTagMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigTagsRelationMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.HistoryConfigInfoMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantInfoMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantCapacityMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.GroupCapacityMapperByPostgreSql
1.4 增加 postgresql文件夹
com.alibaba.nacos.plugin.datasource.impl 模块下
1.5 增加postgresql常量
com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant.java
public static final String POSTGRESQL = "postgresql";
1.6 根据SPI机制进行代码扩展。
在com.alibaba.nacos.plugin.datasource.impl.postgresql下新建1.3的那9个类,内容如下:
ConfigInfoAggrMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.ConfigInfoAggrMapper; import java.util.List; public class ConfigInfoAggrMapperByPostgreSql extends AbstractMapper implements ConfigInfoAggrMapper { @Override public String batchRemoveAggr(List<String> datumList) { final StringBuilder datumString = new StringBuilder(); for (String datum : datumList) { datumString.append('\'').append(datum).append("',"); } datumString.deleteCharAt(datumString.length() - 1); return "DELETE FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND tenant_id = ? AND datum_id IN (" + datumString + ")"; } @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(); } @Override 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"; } @Override public String findConfigInfoAggrByPageFetchRows(int startRow, int pageSize) { return "SELECT data_id,group_id,tenant_id,datum_id,app_name,content FROM config_info_aggr WHERE data_id= ? AND " + "group_id= ? AND tenant_id= ? ORDER BY datum_id " + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findAllAggrGroupByDistinct() { return "SELECT DISTINCT data_id, group_id, tenant_id FROM config_info_aggr"; } @Override public String getTableName() { return TableConstant.CONFIG_INFO_AGGR; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } }
ConfigInfoBetaMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; 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 class ConfigInfoBetaMapperByPostgreSql extends AbstractMapper implements ConfigInfoBetaMapper { @Override 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 = '')"; } @Override public String findAllConfigInfoBetaForDumpAllFetchRows(int startRow, int pageSize) { return " SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips,encrypted_data_key " + " FROM ( SELECT id FROM config_info_beta ORDER BY id OFFSET " + startRow + " LIMIT " + pageSize + " )" + " g, config_info_beta t WHERE g.id = t.id "; } @Override public String getTableName() { return TableConstant.CONFIG_INFO_BETA; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } }
ConfigInfoMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.ConfigInfoMapper; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ConfigInfoMapperByPostgreSql extends AbstractMapper implements ConfigInfoMapper { private static final String DATA_ID = "dataId"; private static final String GROUP = "group"; private static final String APP_NAME = "appName"; private static final String CONTENT = "content"; private static final String TENANT = "tenant"; @Override public String findConfigMaxId() { return "SELECT MAX(id) FROM config_info"; } @Override public String findAllDataIdAndGroup() { return "SELECT DISTINCT data_id, group_id FROM config_info"; } @Override public String findConfigInfoByAppCountRows() { return "SELECT count(*) FROM config_info WHERE tenant_id LIKE ? AND app_name= ?"; } @Override public String findConfigInfoByAppFetchRows(int startRow, int pageSize) { return "SELECT id,data_id,group_id,tenant_id,app_name,content FROM config_info" + " WHERE tenant_id LIKE ? AND app_name= ?" + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String configInfoLikeTenantCount() { return "SELECT count(*) FROM config_info WHERE tenant_id LIKE ?"; } @Override public String getTenantIdList(int startRow, int pageSize) { return "SELECT tenant_id FROM config_info WHERE tenant_id != '' GROUP BY tenant_id OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String getGroupIdList(int startRow, int pageSize) { return "SELECT group_id FROM config_info WHERE tenant_id ='' GROUP BY group_id OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findAllConfigKey(int startRow, int pageSize) { return " SELECT data_id,group_id,app_name FROM ( " + " SELECT id FROM config_info WHERE tenant_id LIKE ? ORDER BY id OFFSET " + startRow + " LIMIT " + pageSize + " )" + " g, config_info t WHERE g.id = t.id "; } @Override public String findAllConfigInfoBaseFetchRows(int startRow, int pageSize) { return "SELECT t.id,data_id,group_id,content,md5" + " FROM ( SELECT id FROM config_info ORDER BY id OFFSET ? LIMIT ? ) " + " g, config_info t WHERE g.id = t.id "; } @Override public String findAllConfigInfoFragment(int startRow, int pageSize) { return "SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type,encrypted_data_key " + "FROM config_info WHERE id > ? ORDER BY id ASC OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findChangeConfig() { return "SELECT data_id, group_id, tenant_id, app_name, content, gmt_modified,encrypted_data_key " + "FROM config_info WHERE gmt_modified >= ? AND gmt_modified <= ?"; } @Override public String findChangeConfigCountRows(Map<String, String> params, final Timestamp startTime, final Timestamp endTime) { 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 sqlCountRows = "SELECT count(*) 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 sqlCountRows + where; } @Override public String findChangeConfigFetchRows(Map<String, String> params, final Timestamp startTime, final Timestamp endTime, int startRow, int pageSize, long lastMaxId) { final String tenant = params.get(TENANT); final String dataId = params.get(DATA_ID); final String group = params.get(GROUP); final String appName = params.get(APP_NAME); final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant; final String sqlFetchRows = "SELECT id,data_id,group_id,tenant_id,app_name,content,type,md5,gmt_modified FROM config_info WHERE "; String where = " 1=1 "; if (!StringUtils.isBlank(dataId)) { where += " AND data_id LIKE ? "; } if (!StringUtils.isBlank(group)) { where += " AND group_id LIKE ? "; } if (!StringUtils.isBlank(tenantTmp)) { where += " AND tenant_id = ? "; } if (!StringUtils.isBlank(appName)) { where += " AND app_name = ? "; } if (startTime != null) { where += " AND gmt_modified >=? "; } if (endTime != null) { where += " AND gmt_modified <=? "; } return sqlFetchRows + where + " AND id > " + lastMaxId + " ORDER BY id ASC" + " OFFSET " + 0 + " LIMIT " + pageSize; } @Override public String listGroupKeyMd5ByPageFetchRows(int startRow, int pageSize) { return "SELECT t.id,data_id,group_id,tenant_id,app_name,md5,type,gmt_modified,encrypted_data_key FROM " + "( SELECT id FROM config_info ORDER BY id OFFSET " + startRow + " LIMIT " + pageSize + " ) g, config_info t WHERE g.id = t.id"; } @Override public String findAllConfigInfo4Export(List<Long> ids, Map<String, String> params) { String tenant = params.get("tenant"); String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant; String sql = "SELECT id,data_id,group_id,tenant_id,app_name,content,type,md5,gmt_create,gmt_modified,src_user,src_ip," + "c_desc,c_use,effect,c_schema,encrypted_data_key FROM config_info"; StringBuilder where = new StringBuilder(" WHERE "); List<Object> paramList = new ArrayList<>(); if (!CollectionUtils.isEmpty(ids)) { where.append(" id IN ("); for (int i = 0; i < ids.size(); i++) { if (i != 0) { where.append(", "); } where.append('?'); paramList.add(ids.get(i)); } where.append(") "); } else { where.append(" tenant_id= ? "); paramList.add(tenantTmp); if (!StringUtils.isBlank(params.get(DATA_ID))) { where.append(" AND data_id LIKE ? "); } if (StringUtils.isNotBlank(params.get(GROUP))) { where.append(" AND group_id= ? "); } if (StringUtils.isNotBlank(params.get(APP_NAME))) { where.append(" AND app_name= ? "); } } return sql + where; } @Override public String findConfigInfoBaseLikeCountRows(Map<String, String> params) { final String sqlCountRows = "SELECT count(*) 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 sqlCountRows + where; } @Override public String findConfigInfoBaseLikeFetchRows(Map<String, String> params, int startRow, int pageSize) { final String sqlFetchRows = "SELECT id,data_id,group_id,tenant_id,content FROM config_info WHERE "; String where = " 1=1 AND tenant_id='' "; if (!StringUtils.isBlank(params.get(DATA_ID))) { where += " AND data_id LIKE ? "; } if (!StringUtils.isBlank(params.get(GROUP))) { where += " AND group_id LIKE "; } if (!StringUtils.isBlank(params.get(CONTENT))) { where += " AND content LIKE ? "; } return sqlFetchRows + where + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findConfigInfo4PageCountRows(Map<String, String> params) { final String appName = params.get(APP_NAME); final String dataId = params.get(DATA_ID); final String group = params.get(GROUP); final String sqlCount = "SELECT count(*) 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 sqlCount + where; } @Override public String findConfigInfo4PageFetchRows(Map<String, String> params, int startRow, int pageSize) { final String appName = params.get(APP_NAME); final String dataId = params.get(DATA_ID); final String group = params.get(GROUP); final String sql = "SELECT id,data_id,group_id,tenant_id,app_name,content,type,encrypted_data_key FROM config_info"; StringBuilder where = new StringBuilder(" WHERE "); where.append(" tenant_id=? "); if (StringUtils.isNotBlank(dataId)) { where.append(" AND data_id=? "); } if (StringUtils.isNotBlank(group)) { where.append(" AND group_id=? "); } if (StringUtils.isNotBlank(appName)) { where.append(" AND app_name=? "); } return sql + where + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findConfigInfoBaseByGroupFetchRows(int startRow, int pageSize) { return "SELECT id,data_id,group_id,content FROM config_info WHERE group_id=? AND tenant_id=?" + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findConfigInfoLike4PageCountRows(Map<String, String> params) { 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 sqlCountRows = "SELECT count(*) 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 sqlCountRows + where; } @Override public String findConfigInfoLike4PageFetchRows(Map<String, String> params, int startRow, int pageSize) { String dataId = params.get(DATA_ID); String group = params.get(GROUP); final String appName = params.get(APP_NAME); final String content = params.get(CONTENT); final String sqlFetchRows = "SELECT id,data_id,group_id,tenant_id,app_name,content,encrypted_data_key FROM config_info"; StringBuilder where = new StringBuilder(" WHERE "); where.append(" tenant_id LIKE ? "); if (!StringUtils.isBlank(dataId)) { where.append(" AND data_id LIKE ? "); } if (!StringUtils.isBlank(group)) { where.append(" AND group_id LIKE ? "); } if (!StringUtils.isBlank(appName)) { where.append(" AND app_name = ? "); } if (!StringUtils.isBlank(content)) { where.append(" AND content LIKE ? "); } return sqlFetchRows + where + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findAllConfigInfoFetchRows(int startRow, int pageSize) { return "SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5 " + " FROM ( SELECT id FROM config_info WHERE tenant_id LIKE ? ORDER BY id OFFSET ? LIMIT ? )" + " g, config_info t WHERE g.id = t.id "; } @Override public String findConfigInfosByIds(int idSize) { StringBuilder sql = new StringBuilder( "SELECT ID,data_id,group_id,tenant_id,app_name,content,md5 FROM config_info WHERE "); sql.append("id IN ("); for (int i = 0; i < idSize; i++) { if (i != 0) { sql.append(", "); } sql.append('?'); } sql.append(") "); return sql.toString(); } @Override public String removeConfigInfoByIdsAtomic(int size) { StringBuilder sql = new StringBuilder("DELETE FROM config_info WHERE "); sql.append("id IN ("); for (int i = 0; i < size; i++) { if (i != 0) { sql.append(", "); } sql.append('?'); } sql.append(") "); return sql.toString(); } @Override public String getTableName() { return TableConstant.CONFIG_INFO; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } @Override public String updateConfigInfoAtomicCas() { return "UPDATE config_info SET " + "content=?, md5 = ?, src_ip=?,src_user=?,gmt_modified=?, app_name=?,c_desc=?,c_use=?,effect=?,type=?,c_schema=? " + "WHERE data_id=? AND group_id=? AND tenant_id=? AND (md5=? OR md5 IS NULL OR md5='')"; } }
ConfigInfoTagMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; 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 class ConfigInfoTagMapperByPostgreSql extends AbstractMapper implements ConfigInfoTagMapper { @Override 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 = '')"; } @Override public String findAllConfigInfoTagForDumpAllFetchRows(int startRow, int pageSize) { return " SELECT t.id,data_id,group_id,tenant_id,tag_id,app_name,content,md5,gmt_modified " + " FROM ( SELECT id FROM config_info_tag ORDER BY id OFFSET " + startRow + " LIMIT " + pageSize + " ) " + "g, config_info_tag t WHERE g.id = t.id "; } @Override public String getTableName() { return TableConstant.CONFIG_INFO_TAG; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } }
ConfigTagsRelationMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; 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 class ConfigTagsRelationMapperByPostgreSql extends AbstractMapper implements ConfigTagsRelationMapper { @Override public String findConfigInfo4PageCountRows(final Map<String, 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; } @Override public String findConfigInfo4PageFetchRows(Map<String, String> params, int tagSize, int startRow, int pageSize) { final String appName = params.get("appName"); final String dataId = params.get("dataId"); final String group = params.get("group"); StringBuilder where = new StringBuilder(" WHERE "); final String sql = "SELECT a.id,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content FROM config_info a LEFT JOIN " + "config_tags_relation b ON a.id=b.id"; where.append(" a.tenant_id=? "); if (StringUtils.isNotBlank(dataId)) { where.append(" AND a.data_id=? "); } if (StringUtils.isNotBlank(group)) { where.append(" AND a.group_id=? "); } if (StringUtils.isNotBlank(appName)) { where.append(" AND a.app_name=? "); } where.append(" AND b.tag_name IN ("); for (int i = 0; i < tagSize; i++) { if (i != 0) { where.append(", "); } where.append('?'); } where.append(") "); return sql + where + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String findConfigInfoLike4PageCountRows(final Map<String, 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; } @Override public String findConfigInfoLike4PageFetchRows(final Map<String, String> params, int tagSize, int startRow, int pageSize) { final String appName = params.get("appName"); final String content = params.get("content"); final String dataId = params.get("dataId"); final String group = params.get("group"); StringBuilder where = new StringBuilder(" WHERE "); final String sqlFetchRows = "SELECT a.id,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content " + "FROM config_info a LEFT JOIN config_tags_relation b ON a.id=b.id "; where.append(" a.tenant_id LIKE ? "); if (!StringUtils.isBlank(dataId)) { where.append(" AND a.data_id LIKE ? "); } if (!StringUtils.isBlank(group)) { where.append(" AND a.group_id LIKE ? "); } if (!StringUtils.isBlank(appName)) { where.append(" AND a.app_name = ? "); } if (!StringUtils.isBlank(content)) { where.append(" AND a.content LIKE ? "); } where.append(" AND b.tag_name IN ("); for (int i = 0; i < tagSize; i++) { if (i != 0) { where.append(", "); } where.append('?'); } where.append(") "); return sqlFetchRows + where + " OFFSET " + startRow + " LIMIT " + pageSize; } @Override public String getTableName() { return TableConstant.CONFIG_TAGS_RELATION; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } }
HistoryConfigInfoMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; 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 class HistoryConfigInfoMapperByPostgreSql extends AbstractMapper implements HistoryConfigInfoMapper { @Override public String removeConfigHistory() { //return "DELETE FROM his_config_info WHERE gmt_modified < ? LIMIT ?"; String sql = "WITH temp_table as (SELECT id FROM his_config_info WHERE gmt_modified < ? LIMIT ? ) " + "DELETE FROM his_config_info WHERE id in (SELECT id FROM temp_table) "; return sql; } @Override public String findConfigHistoryCountByTime() { return "SELECT count(*) FROM his_config_info WHERE gmt_modified < ?"; } @Override 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 <= ?"; } @Override 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"; } @Override 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 = ?) "; } @Override public String getTableName() { return TableConstant.HIS_CONFIG_INFO; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } }
TenantInfoMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.TenantInfoMapper; public class TenantInfoMapperByPostgreSql extends AbstractMapper implements TenantInfoMapper { @Override public String getTableName() { return TableConstant.TENANT_INFO; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } }
TenantCapacityMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; import com.alibaba.nacos.plugin.datasource.constants.TableConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.mapper.TenantCapacityMapper; public class TenantCapacityMapperByPostgreSql extends AbstractMapper implements TenantCapacityMapper { @Override public String getTableName() { return TableConstant.TENANT_CAPACITY; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } @Override public String incrementUsageWithDefaultQuotaLimit() { return "UPDATE tenant_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE tenant_id = ? AND `usage` <" + " ? AND quota = 0"; } @Override public String incrementUsageWithQuotaLimit() { return "UPDATE tenant_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE tenant_id = ? AND `usage` < " + "quota AND quota != 0"; } @Override public String incrementUsage() { return "UPDATE tenant_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE tenant_id = ?"; } @Override public String decrementUsage() { return "UPDATE tenant_capacity SET `usage` = `usage` - 1, gmt_modified = ? WHERE tenant_id = ? AND `usage` > 0"; } @Override public String correctUsage() { return "UPDATE tenant_capacity SET `usage` = (SELECT count(*) FROM config_info WHERE tenant_id = ?), " + "gmt_modified = ? WHERE tenant_id = ?"; } @Override public String getCapacityList4CorrectUsage() { return "SELECT id, tenant_id FROM tenant_capacity WHERE id>? LIMIT ?"; } @Override public String insertTenantCapacity() { return "INSERT INTO tenant_capacity (tenant_id, quota, `usage`, `max_size`, max_aggr_count, max_aggr_size, " + "gmt_create, gmt_modified) SELECT ?, ?, count(*), ?, ?, ?, ?, ? FROM config_info WHERE tenant_id=?;"; } }
GroupCapacityMapperByPostgreSql
package com.alibaba.nacos.plugin.datasource.impl.postgresql; import com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant; 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 class GroupCapacityMapperByPostgreSql extends AbstractMapper implements GroupCapacityMapper { @Override public String getTableName() { return TableConstant.GROUP_CAPACITY; } @Override public String getDataSource() { return DataSourceConstant.POSTGRESQL; } @Override 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"; } @Override 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 = ''"; } @Override public String incrementUsageByWhereQuotaEqualZero() { return "UPDATE group_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE group_id = ? AND `usage` < ? AND quota = 0"; } @Override public String incrementUsageByWhereQuotaNotEqualZero() { return "UPDATE group_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE group_id = ? AND `usage` < quota AND quota != 0"; } @Override public String incrementUsageByWhere() { return "UPDATE group_capacity SET `usage` = `usage` + 1, gmt_modified = ? WHERE group_id = ?"; } @Override public String decrementUsageByWhere() { return "UPDATE group_capacity SET `usage` = `usage` - 1, gmt_modified = ? WHERE group_id = ? AND `usage` > 0"; } @Override public String updateUsage() { return "UPDATE group_capacity SET `usage` = (SELECT count(*) FROM config_info), gmt_modified = ? WHERE group_id = ?"; } @Override 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= ?"; } @Override public String selectGroupInfoBySize() { return "SELECT id, group_id FROM group_capacity WHERE id > ? LIMIT ?"; } }
2. 编译打包源码
mvn -Prelease-nacos clean package install -Dmaven.test.skip=true
3. 配置文件修改
spring.datasource.platform=postgresql db.num=1 db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?reWriteBatchedInserts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai db.user.0=postgres db.password.0=123456 db.pool.config.driverClassName=org.postgresql.Driver
4.运行nacos
.\startup.cmd -m standalone
原文链接:https://blog.csdn.net/qq_36805343/article/details/129318292
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)