diff --git a/README.md b/README.md index 506d0dc3e30c7b26efb14cf9266c93433657bfc4..23c5ddedd16ed02d0218ad927a623b5af7d3d010 100644 --- a/README.md +++ b/README.md @@ -9,19 +9,19 @@ + OpenGauss (高斯) + Oracle(8, 9, 10, 11, 12 ... ) + PostgreSQL + + Derby #### 软件架构 作为nacos的插件使用 #### 版本映射 -| 插件版本 | 构建时使用的nacos版本 | 支持的Nacos版本 | 测试过的nacos版本 | -| ------------- | :-------------------: | :-------------: | ----------------- | -| 1.0.x | 2.4.1 | 理论上是 all | 2.3.2、2.4.1 | -| 2.0.0 - 2.0.5 | 2.4.1 | 理论上是 all | 2.3.2、2.4.1 | -| | | | | - +| 插件版本 | 构建时使用的nacos版本 | 支持的Nacos版本 | 测试过的nacos版本 | +|:-------------:|:------------------:|:------------:|-------------------------------------------------| +| `1.0.x` | `2.4.1` | 理论上`>=2.2.0` | `2.3.2`
`2.4.1` | +| `2.0.0` ~ `2.0.7` | `2.4.1` | 理论上`>=2.2.0` | `2.3.2`
`2.4.1` | +支持的nacos 版本,从2.2.0开始原因:nacos 2.2.0才支持这一套插件系统,在此之前需要直接修改nacos的源码。 #### 安装教程 diff --git a/RELEASE-LOG.MD b/RELEASE-LOG.MD index 16f098a29a5c0930503fd28533ec9387a46a5ab9..20cfbc86a46f20e6aeb40775db00389d93831485 100644 --- a/RELEASE-LOG.MD +++ b/RELEASE-LOG.MD @@ -1,3 +1,12 @@ +## 2.0.8 +1. 代码整理,简化 *Mapper 类 +2. 避免dialect等重复创建,重复打印日志 +3. 对介质瘦身 +4. 默认的 ddl identifier quote mode 修改为 unquoted +## 2.0.7 +1. 支持禁用nacos默认插件derby, mysql +2. 提供derby 的sql schema +3. 支持derby数据库 ## 2.0.6 1. 解决OpenGauss中将`''`处理成NULL的情况 ## 2.0.5 diff --git a/nacosplugin-all/pom.xml b/nacosplugin-all/pom.xml index 596699c6709823e84cb5f97acad7bea2e05ec2c1..91739f8228d9f3d208a0e68212cf0aa538023c26 100644 --- a/nacosplugin-all/pom.xml +++ b/nacosplugin-all/pom.xml @@ -6,13 +6,13 @@ io.github.bes2008.solution.nacosplugins nacos-plugins - 2.0.6 + 2.0.8 nacosplugin-all ${project.groupId}:${project.artifactId}:${project.version} - 3.4.1 + 3.5.0 @@ -189,6 +189,7 @@ + true diff --git a/nacosplugin-all/src/main/java/com/jn/nacos/plugin/JnNacosPlugin.java b/nacosplugin-all/src/main/java/com/jn/nacos/plugin/JnNacosPlugin.java index 9785176d081b7e46175a057992ad2c8d75c83bad..76cfb62d722e02543dffe5289dc6e4fc53deed15 100644 --- a/nacosplugin-all/src/main/java/com/jn/nacos/plugin/JnNacosPlugin.java +++ b/nacosplugin-all/src/main/java/com/jn/nacos/plugin/JnNacosPlugin.java @@ -1,5 +1,14 @@ package com.jn.nacos.plugin; -public class JnNacosPlugin { +import com.alibaba.nacos.plugin.datasource.MapperManager; +import com.jn.langx.lifecycle.AbstractInitializable; +import com.jn.langx.lifecycle.InitializationException; + +public class JnNacosPlugin extends AbstractInitializable { private JnNacosPlugin(){} + + @Override + public void init() throws InitializationException { + MapperManager.instance(true).loadInitial(); + } } diff --git a/nacosplugin-datasource-sqlscript/pom.xml b/nacosplugin-datasource-sqlscript/pom.xml index cce5a821e750f2b382bab04b7ceee2a0056f0739..adbea2dd6169d59e14f6764f08ba44f0c3c2b48b 100644 --- a/nacosplugin-datasource-sqlscript/pom.xml +++ b/nacosplugin-datasource-sqlscript/pom.xml @@ -6,7 +6,7 @@ io.github.bes2008.solution.nacosplugins nacos-plugins - 2.0.6 + 2.0.8 nacosplugin-datasource-sqlscript diff --git a/nacosplugin-datasource-sqlscript/resources/sql/README.MD b/nacosplugin-datasource-sqlscript/resources/sql/README.MD index 0b2ebf461cd3085858bab78e7a984c25fac35ac1..baac2269219387d5820d29a217a0be3b5c3cec10 100644 --- a/nacosplugin-datasource-sqlscript/resources/sql/README.MD +++ b/nacosplugin-datasource-sqlscript/resources/sql/README.MD @@ -1,5 +1,5 @@ 在DDL语句中,identifier(表名、列名)的要求: -+ 尽量统一加上引号 ++ 尽量统一不加引号 + 如果不想统一加引号,按如下规则来处理: + 不加引号的identifier,必须使用小写形式 (原因: nacos 中的代码中,将列名、表名都是定死的小写),由数据库内部自行处理。 + 加引号的identifier,按照数据库对不加引号的identifier的处理方式来处理。 diff --git a/nacosplugin-datasource-sqlscript/resources/sql/derby/derby-schema.sql b/nacosplugin-datasource-sqlscript/resources/sql/derby/derby-schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..3d955fca55903b4898c59fb7494ece582bd2fbdc --- /dev/null +++ b/nacosplugin-datasource-sqlscript/resources/sql/derby/derby-schema.sql @@ -0,0 +1,227 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +CREATE SCHEMA nacos AUTHORIZATION nacos; + +CREATE TABLE config_info ( + id bigint NOT NULL generated by default as identity, + data_id varchar(255) NOT NULL, + group_id varchar(128) NOT NULL, + tenant_id varchar(128) default '', + app_name varchar(128), + content CLOB, + md5 varchar(32) DEFAULT NULL, + gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', + gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', + src_user varchar(128) DEFAULT NULL, + src_ip varchar(50) 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 LONG VARCHAR DEFAULT NULL, + encrypted_data_key LONG VARCHAR 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 NOT NULL generated by default as identity, + data_id varchar(255) NOT NULL, + group_id varchar(128) NOT NULL, + tenant_id varchar(128) default '', + app_name varchar(128), + content CLOB, + md5 varchar(32) DEFAULT NULL, + gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000', + gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000', + src_user varchar(128), + src_ip varchar(50) DEFAULT NULL, + op_type char(10) DEFAULT NULL, + encrypted_data_key LONG VARCHAR 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 NOT NULL generated by default as identity, + data_id varchar(255) NOT NULL, + group_id varchar(128) NOT NULL, + tenant_id varchar(128) default '', + app_name varchar(128), + content CLOB, + beta_ips varchar(1024), + md5 varchar(32) DEFAULT NULL, + gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', + gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', + src_user varchar(128), + src_ip varchar(50) DEFAULT NULL, + encrypted_data_key LONG VARCHAR 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 NOT NULL generated by default as identity, + 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 CLOB, + md5 varchar(32) DEFAULT NULL, + gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', + gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', + src_user varchar(128), + src_ip varchar(50) 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 NOT NULL generated by default as identity, + 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 CLOB, + gmt_modified timestamp 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 NOT NULL generated by default as identity, + app_name varchar(128) NOT NULL, + is_dynamic_collect_disabled smallint DEFAULT 0, + last_sub_info_collected_time timestamp DEFAULT '1970-01-01 08:00:00.0', + sub_info_lock_owner varchar(128), + sub_info_lock_time timestamp 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 NOT NULL generated by default as identity, + app_name varchar(128) NOT NULL, + data_id varchar(255) NOT NULL, + group_id varchar(128) NOT NULL, + gmt_modified timestamp 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 NOT NULL generated by default as identity, + app_name varchar(128) NOT NULL, + data_id varchar(255) NOT NULL, + group_id varchar(128) NOT NULL, + gmt_modified timestamp 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 NOT NULL generated by default as identity, + 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 NOT NULL generated by default as identity, + 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 timestamp DEFAULT '2010-05-05 00:00:00', + gmt_modified timestamp 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 NOT NULL generated by default as identity, + 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 timestamp DEFAULT '2010-05-05 00:00:00', + gmt_modified timestamp 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 NOT NULL generated by default as identity, + 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 boolean NOT NULL DEFAULT true +); + +CREATE TABLE roles ( + username varchar(50) NOT NULL, + role varchar(50) NOT NULL, + constraint uk_username_role UNIQUE (username,role) +); + +CREATE TABLE permissions ( + role varchar(50) NOT NULL, + resource varchar(512) NOT NULL, + action varchar(8) NOT NULL, + constraint uk_role_permission UNIQUE (role,resource,action) +); + + +/******************************************/ +/* ipv6 support */ +/******************************************/ +ALTER TABLE config_info_tag +MODIFY COLUMN src_ip varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER src_user; + +ALTER TABLE his_config_info +MODIFY COLUMN src_ip varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL AFTER src_user; + +ALTER TABLE config_info +MODIFY COLUMN src_ip varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER src_user; + +ALTER TABLE config_info_beta +MODIFY COLUMN src_ip varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER src_user; \ No newline at end of file diff --git a/nacosplugin-datasource/installation.MD b/nacosplugin-datasource/installation.MD index 2a963d3a7b6d7da0640091c9e47757fc498a0b52..0fa4ba3cfbcae104daa8d79cdde604ab0ab8d502 100644 --- a/nacosplugin-datasource/installation.MD +++ b/nacosplugin-datasource/installation.MD @@ -1,12 +1,12 @@ ## datasource 插件安装 -1. 将插件、数据库驱动 放到 `nacos/plugins` 目录 +1. 将插件、数据库驱动 放到 `/plugins` 目录 ```text io.github.bes2008.solution.nacosplugins:nacosplugin-all:jar:VERSION ``` 2. 在application.properties中配置数据库 -以postgresql 数据库为例,修改 `nacos/conf/application.properties` : +以postgresql 数据库为例,修改 `/conf/application.properties` : ```properties # PostgreSQL spring.sql.init.platform=postgresql @@ -19,9 +19,9 @@ db.pool.config.driverClassName=org.postgresql.Driver 3. 初始数据库schema -使用DBeaver 等工具,连接到数据库,执行相关schema初始化。脚本位置: +使用DBeaver、 数据库 CLI 等工具,连接到数据库,执行相关schema初始化。脚本位置: ```text -nacosplugin-datasource-sqlscripts/resources/sql/ 目录下 +代码仓库的nacosplugin-datasource-sqlscripts/resources/sql/ 目录下 ``` 4. 启动nacos访问 @@ -134,20 +134,24 @@ mysql --password=root_password --host=localhost --port=3306 --user root < create # MySQL spring.sql.init.platform=mysql db.num=1 -db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useServerPrepStmts=true +db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useServerPrepStmts=true&allowPublicKeyRetrieval=true db.user.0=root db.password.0=root_password db.pool.config.driverClassName=com.mysql.cj.jdbc.Driver +# mysql默认使用nacos 内置的mysql插件,如果要禁用内置mysql插件,可以添加下面的配置 +spring.sql.plugin.builtin.enabled=false +``` +3. 版本限制 +```text +nacos_version >= 2.3.0 时,支持将mysql替换为本插件。 ``` - - ## 支持Oracle 1. 脚本执行 ```shell -# 先用 system 创建 C##NACOS用户 +# 先用 system 创建 "C##NACOS" 用户 sqlplus system/Oracle123_Pswd@localhost:1521/FREE @./create-schema.sql -# 再用 C##NACOS用户创建表 +# 再用 "C##NACOS" 用户创建表 sqlplus C##NACOS/NACOS_PASSWORD@localhost:1521/FREE @./create-tables.sql ``` 2. jdbc配置 @@ -164,8 +168,25 @@ db.pool.config.driverClassName=oracle.jdbc.OracleDriver ``` 3. 目前使用Oracle的问题 - + 目前nacos 适配Oracle已完毕,但在启动过程中,nacos.log中会有报错。 + + 目前nacos 适配Oracle已完毕,但在启动过程中,nacos.log中会有报错,这个错误并不影响 oracle 数据库上使用。 + 问题原因:是 nacos 启动是会判定 config_info_tag, config_info_beta表是否存在。 这个方法是直接定死的使用了limit 1,没有通过插件的方式。 + 问题归属:这个属于 nacos 的Bug,已在 [github 上提交了相关问题](https://github.com/alibaba/nacos/issues/12569)。 - + 问题版本:<=2.4.1 - + 影响范围:只会影响到dump接口,功能不受影响 \ No newline at end of file + + 问题版本:<=2.4.1,已于 nacos 2.4.2 版本修复 + + 影响范围:只会影响到dump接口,功能不受影响 + +## 支持Derby + +1. 配置 +```properties +# derby 默认使用 nacos 内置的 derby 插件,如果要禁用内置 derby 插件,可以添加下面的配置 +spring.sql.plugin.builtin.enabled=false +``` +2. 启动 +```shell +# 必须以 standalone 模式启动时,且不配置为其它数据库的情况下,才会启用 derby数据库 +/bin/startup.sh -m standalone +``` +3. 版本限制 +```text +nacos_version >= 2.3.0 时,支持将 derby 替换为本插件。 +``` \ No newline at end of file diff --git a/nacosplugin-datasource/pom.xml b/nacosplugin-datasource/pom.xml index f6f4a9260e21608664edfa2b2d06c952f6eeef19..ac72aa95524af8cfe3e6768c082c2b5e4ef86e1e 100644 --- a/nacosplugin-datasource/pom.xml +++ b/nacosplugin-datasource/pom.xml @@ -6,7 +6,7 @@ io.github.bes2008.solution.nacosplugins nacos-plugins - 2.0.6 + 2.0.8 nacosplugin-datasource @@ -45,7 +45,7 @@ junit junit - 4.11 + 4.13.1 test diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosDatabaseDialect.java index e1cd3bf7fe6ac8c9e151788aefb06b5aa45ea173..2be15da21d726aff32b68377150275ad39c5788a 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosDatabaseDialect.java @@ -31,7 +31,7 @@ public abstract class NacosDatabaseDialect { String sqlhelperDialect = getCustomizedDialect(this.name); this.delegate = DialectRegistry.getInstance().gaussDialect(sqlhelperDialect); this.functionMap = initFunctionMap(); - this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; + this.identifierQuotedMode = IdentifierQuotedMode.UNQUOTED; } public IdentifierQuotedMode getPluginProvidedDDLIdentifierQuotedMode(){ diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosEnvs.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosEnvs.java new file mode 100644 index 0000000000000000000000000000000000000000..2084b056731a6517ae55ee53a8a67e46097f0831 --- /dev/null +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/NacosEnvs.java @@ -0,0 +1,117 @@ +package com.jn.nacos.plugin.datasource; + +import com.alibaba.nacos.common.utils.VersionUtils; +import com.alibaba.nacos.sys.env.EnvUtil; +import com.jn.langx.util.Objs; +import com.jn.langx.util.Strings; +import com.jn.langx.util.enums.Enums; +import com.jn.langx.util.logging.Loggers; +import com.jn.langx.util.reflect.Reflects; +import com.jn.sqlhelper.dialect.Dialect; +import com.jn.sqlhelper.dialect.DialectRegistry; +import org.slf4j.Logger; + +public class NacosEnvs { + /** + * 指定要使用什么数据源 + */ + @Deprecated + private static final String CONFIG_KEY_DATASOURCE_PLATFORM_DEPRECATED="spring.datasource.platform"; + private static final String CONFIG_KEY_DATASOURCE_PLATFORM="spring.sql.init.platform"; + + /** + * 是否启用 nacos 默认的 datasource 插件。 + */ + private static final String CONFIG_KEY_DATASOURCE_PLUGIN_BUILTIN_ENABLED="spring.sql.plugin.builtin.enabled"; + + /** + * 创建数据库schema时,使用的DDL语句中,identifier 的引号模式 + */ + private static final String CONFIG_KEY_DB_DDL_IDENTIFIER_QUOTED_MODE="db.sql.identifier.quoted.mode"; + + public static int versionCompare(String comparedVersion) { + String currentVersion = toNacosStandardVersion(VersionUtils.version); + String version2 = toNacosStandardVersion(comparedVersion); + return VersionUtils.compareVersion(currentVersion, version2); + } + + private static String toNacosStandardVersion(String version) { + String[] segments = Strings.split(version, "."); + String nacosVersion = Strings.join(".", segments, 0, 3); + return nacosVersion; + } + + + + public static boolean hasEncryptedDataKeyColumn() { + return versionCompare("2.1.0") >= 0; + } + + /** + * 当使用的 create-schema.sql, create-tables.sql 不是插件提供的,需要指定该配置。 + */ + public static IdentifierQuotedMode getConfiguredIdentifierQuotedMode(NacosDatabaseDialect dialect) { + String modeString = EnvUtil.getProperty(CONFIG_KEY_DB_DDL_IDENTIFIER_QUOTED_MODE); + IdentifierQuotedMode mode = null; + if (Strings.isNotBlank(modeString)) { + mode = Enums.ofName(IdentifierQuotedMode.class, modeString); + } + if (mode == null) { + mode = dialect.getPluginProvidedDDLIdentifierQuotedMode(); + } + if (mode == null) { + mode = IdentifierQuotedMode.UNQUOTED; + } + return mode; + } + + public static String getConfiguredDatabaseName() { + String databaseName = EnvUtil.getProperty(CONFIG_KEY_DATASOURCE_PLATFORM); + if (Strings.isBlank(databaseName)) { + // 这个是 nacos 中更早的配置 datasource 类型的方式 + databaseName = EnvUtil.getProperty(CONFIG_KEY_DATASOURCE_PLATFORM_DEPRECATED); + } + if (Strings.isBlank(databaseName)) { + // 内嵌数据库 derby + if (EnvUtil.getStandaloneMode()) { + databaseName = DatabaseNames.DERBY; + } else { // 默认数据库 MySQL + databaseName = DatabaseNames.MSSQL; + } + } else { + Dialect dialect = DialectRegistry.getInstance().gaussDialect(databaseName); + if (dialect == null) { + databaseName = DatabaseNames.UNSUPPORTED; + } + } + + if (Strings.isBlank(databaseName)) { + databaseName = DatabaseNames.UNDEFINED; + } + + if (Objs.equals(DatabaseNames.DERBY, databaseName) || Objs.equals(DatabaseNames.MYSQL, databaseName)) { + // 只要不是false|False 等,就是禁用,默认值为 true + boolean builtinDatasourcePluginEnabled = NacosEnvs.supportsBuiltinDatabasePluginReplaced() && (!Strings.equalsIgnoreCase(EnvUtil.getProperty(CONFIG_KEY_DATASOURCE_PLUGIN_BUILTIN_ENABLED, "true"), "false")); + + // 自定义的插件会优先于 内置的 derby, mysql 插件 + // 放到 MapperManager 中使用了 map#putIfAbsent,所以要启用 内置的 derby, mysql,必须保证 自定义的插件名字不能是 mysql,derby + Logger logger = Loggers.getLogger(NacosEnvs.class); + logger.info("nacos builtin datasource plugin is {}", builtinDatasourcePluginEnabled ? "enabled" : "disabled"); + if (builtinDatasourcePluginEnabled) { + databaseName = DatabaseNames.UNDEFINED; + logger.info("rename the customized mapper {} to {}", Reflects.getFQNClassName(NacosEnvs.class), databaseName); + } + } + return databaseName; + } + + /** + * 内置 数据库插件 (derby, mysql) 是否可以被替换 + * + * @return 是否可替换 + */ + public static boolean supportsBuiltinDatabasePluginReplaced() { + return versionCompare("2.3.0") >= 0; + } + +} diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/PluginContext.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/PluginContext.java new file mode 100644 index 0000000000000000000000000000000000000000..eb25ceb81221e5504d740f10cfbe2ad905699ac3 --- /dev/null +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/PluginContext.java @@ -0,0 +1,44 @@ +package com.jn.nacos.plugin.datasource; + +import com.jn.langx.lifecycle.AbstractInitializable; +import com.jn.langx.lifecycle.InitializationException; +import com.jn.langx.util.Objs; +import com.jn.langx.util.Preconditions; +import com.jn.langx.util.logging.Loggers; +import org.slf4j.Logger; + +public class PluginContext extends AbstractInitializable { + private String databaseName; + protected NacosDatabaseDialect dialect; + private IdentifierQuotedMode identifierQuotedModeInDDL; + private PluginContext(){ + init(); + } + + @Override + protected void doInit() throws InitializationException { + Logger logger = Loggers.getLogger(PluginContext.class); + logger.info("================== nacos datasource plugin context initial=================="); + this.databaseName = NacosEnvs.getConfiguredDatabaseName(); + Preconditions.checkTrue(!Objs.equals(DatabaseNames.UNSUPPORTED, this.databaseName), "database {} is unsupported", this.databaseName); + this.dialect = NacosDatabaseDialectManager.getInstance().getDialect(this.databaseName); + this.identifierQuotedModeInDDL = NacosEnvs.getConfiguredIdentifierQuotedMode(this.dialect); + logger.info("dialect: {}, identifierQuotedMode: {}", this.databaseName, this.identifierQuotedModeInDDL); + logger.info("================== nacos datasource plugin context initial finished =================="); + } + + public static final PluginContext INSTANCE = new PluginContext(); + + public String getDatabaseName() { + return databaseName; + } + + public IdentifierQuotedMode getIdentifierQuotedModeInDDL() { + return identifierQuotedModeInDDL; + } + + public NacosDatabaseDialect getDialect() { + return dialect; + } +} + diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/derby/DerbyDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/derby/DerbyDatabaseDialect.java index 3e519eecb3d9153457f3d91c6014c1ef7fb4c4d5..d8711308d27ca0ad369fe7b84500eee48b6de651 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/derby/DerbyDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/derby/DerbyDatabaseDialect.java @@ -2,6 +2,7 @@ package com.jn.nacos.plugin.datasource.db.derby; import com.alibaba.nacos.plugin.datasource.enums.derby.TrustedDerbylFunctionEnum; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class DerbyDatabaseDialect extends NacosDatabaseDialect { diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/gauss/OpenGaussDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/gauss/OpenGaussDatabaseDialect.java index 23d2363ef5b7aa6545e093873463ad6e56d76e4c..75db79ef8c30250f72bbbf5279d2bddf09056826 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/gauss/OpenGaussDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/gauss/OpenGaussDatabaseDialect.java @@ -1,11 +1,13 @@ package com.jn.nacos.plugin.datasource.db.gauss; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class OpenGaussDatabaseDialect extends NacosDatabaseDialect { public OpenGaussDatabaseDialect() { super(DatabaseNames.OPENGAUSS); + this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/kingbase/KingbaseDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/kingbase/KingbaseDatabaseDialect.java index 79fe934e9850ec1de20209ea01c2f34f9c1a959b..1c010dd2734cea8669f8782a0ba21cc18f70563a 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/kingbase/KingbaseDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/kingbase/KingbaseDatabaseDialect.java @@ -1,11 +1,13 @@ package com.jn.nacos.plugin.datasource.db.kingbase; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class KingbaseDatabaseDialect extends NacosDatabaseDialect { public KingbaseDatabaseDialect() { super(DatabaseNames.KINGBASE); + this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/magicdata/MagicDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/magicdata/MagicDatabaseDialect.java index 779a914265d11d99ddc7ef08d17f6f72c0077d66..f2b27cb2144756693b3edd473282fc532300ff40 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/magicdata/MagicDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/magicdata/MagicDatabaseDialect.java @@ -1,11 +1,13 @@ package com.jn.nacos.plugin.datasource.db.magicdata; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class MagicDatabaseDialect extends NacosDatabaseDialect { public MagicDatabaseDialect() { super(DatabaseNames.MAGICDATA); + this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mssql/MssqlDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mssql/MssqlDatabaseDialect.java index 84661d061710e1fa98b954e0a2b8fb810a1b199e..ef68a5fecd53fa2fce17a1373079381dcd24d1b7 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mssql/MssqlDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mssql/MssqlDatabaseDialect.java @@ -2,6 +2,7 @@ package com.jn.nacos.plugin.datasource.db.mssql; import com.jn.langx.util.collection.Maps; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; import java.util.Map; @@ -9,6 +10,7 @@ import java.util.Map; public class MssqlDatabaseDialect extends NacosDatabaseDialect { public MssqlDatabaseDialect() { super(DatabaseNames.MSSQL); + this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mysql/MysqlDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mysql/MysqlDatabaseDialect.java index 17cd3455ac06d8a08108a4537be9223cc9560fd1..97ab62bfa00b435a8db4ad05dfc9e98c00f114d6 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mysql/MysqlDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/mysql/MysqlDatabaseDialect.java @@ -2,12 +2,14 @@ package com.jn.nacos.plugin.datasource.db.mysql; import com.alibaba.nacos.plugin.datasource.enums.mysql.TrustedMysqlFunctionEnum; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class MysqlDatabaseDialect extends NacosDatabaseDialect { public MysqlDatabaseDialect() { super(DatabaseNames.MYSQL); + this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/oracle/OracleDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/oracle/OracleDatabaseDialect.java index 6221c46fbb05c30d674c30c158ff6d7d6d095e50..4a517dc41d9f5bb36b831ea315d8267df3190917 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/oracle/OracleDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/oracle/OracleDatabaseDialect.java @@ -1,13 +1,11 @@ package com.jn.nacos.plugin.datasource.db.oracle; import com.jn.nacos.plugin.datasource.DatabaseNames; -import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class OracleDatabaseDialect extends NacosDatabaseDialect { public OracleDatabaseDialect(){ super(DatabaseNames.ORACLE); - this.identifierQuotedMode = IdentifierQuotedMode.UNQUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/postgresql/PostgresDatabaseDialect.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/postgresql/PostgresDatabaseDialect.java index 21ae63ac50800988acc3a99d7beca7d0f80989ab..ae51a90a323ac0e6396c3f25c3343f68478bfa92 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/postgresql/PostgresDatabaseDialect.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/db/postgresql/PostgresDatabaseDialect.java @@ -1,11 +1,13 @@ package com.jn.nacos.plugin.datasource.db.postgresql; import com.jn.nacos.plugin.datasource.DatabaseNames; +import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; public class PostgresDatabaseDialect extends NacosDatabaseDialect { public PostgresDatabaseDialect() { super(DatabaseNames.POSTGRESQL); + this.identifierQuotedMode = IdentifierQuotedMode.QUOTED; } @Override diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/BaseMapper.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/BaseMapper.java index 2d8645b5b70189d56f860145ee39318bbeb7e5f0..faae0a48f477180fbe9654a8e93e95be62dcc19d 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/BaseMapper.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/BaseMapper.java @@ -1,108 +1,44 @@ package com.jn.nacos.plugin.datasource.mapper; import com.alibaba.nacos.common.utils.NamespaceUtil; -import com.alibaba.nacos.common.utils.VersionUtils; import com.alibaba.nacos.plugin.datasource.constants.FieldConstant; import com.alibaba.nacos.plugin.datasource.mapper.AbstractMapper; import com.alibaba.nacos.plugin.datasource.model.MapperContext; -import com.alibaba.nacos.sys.env.EnvUtil; import com.jn.langx.util.Objs; -import com.jn.langx.util.Preconditions; import com.jn.langx.util.Strings; import com.jn.langx.util.collection.Pipeline; -import com.jn.langx.util.enums.Enums; -import com.jn.nacos.plugin.datasource.DatabaseNames; -import com.jn.nacos.plugin.datasource.IdentifierQuotedMode; -import com.jn.nacos.plugin.datasource.NacosDatabaseDialect; -import com.jn.nacos.plugin.datasource.NacosDatabaseDialectManager; +import com.jn.nacos.plugin.datasource.*; import com.jn.sqlhelper.dialect.Dialect; -import com.jn.sqlhelper.dialect.DialectRegistry; - import java.util.List; public abstract class BaseMapper extends AbstractMapper { - private final String databaseName; - protected NacosDatabaseDialect dialect; - private IdentifierQuotedMode identifierQuotedModeInDDL; - protected BaseMapper() { - this.databaseName = getConfiguredDatabaseName(); - Preconditions.checkTrue(!Objs.equals(DatabaseNames.UNSUPPORTED, this.databaseName), "database {} is unsupported", this.databaseName); - this.dialect = NacosDatabaseDialectManager.getInstance().getDialect(this.databaseName); - this.identifierQuotedModeInDDL = getConfiguredIdentifierQuotedMode(); - } - - /** - * 当使用的 create-schema.sql, create-tables.sql 不是插件提供的,需要指定该配置。 - */ - private IdentifierQuotedMode getConfiguredIdentifierQuotedMode(){ - String modeString = EnvUtil.getProperty("db.sql.identifier.quoted.mode"); - IdentifierQuotedMode mode = null; - if(Strings.isNotBlank(modeString)){ - mode = Enums.ofName(IdentifierQuotedMode.class, modeString); - } - if(mode==null){ - mode = this.dialect.getPluginProvidedDDLIdentifierQuotedMode(); - } - if(mode==null){ - mode = IdentifierQuotedMode.QUOTED; - } - return mode; - } - - private String getConfiguredDatabaseName(){ - String databaseName = EnvUtil.getProperty("spring.sql.init.platform"); - if(Strings.isBlank(databaseName)){ - // 这个是 nacos 中更早的配置 datasource 类型的方式 - databaseName = EnvUtil.getProperty("spring.datasource.platform"); - } - if(Strings.isBlank(databaseName)){ - // 内嵌数据库 derby - if (EnvUtil.getStandaloneMode()){ - databaseName = DatabaseNames.DERBY; - } - else{ // 默认数据库 MySQL - databaseName = DatabaseNames.MSSQL; - } - }else{ - Dialect dialect = DialectRegistry.getInstance().gaussDialect(databaseName); - if(dialect==null){ - databaseName = DatabaseNames.UNSUPPORTED; - } - } - - // 因为 mysql 不支持 在子查询中 的limit,所以 不使用自定义的SQL,而使用官方的插件 - if(Strings.isBlank(databaseName) || Objs.equals(DatabaseNames.DERBY, databaseName) || Objs.equals(DatabaseNames.MYSQL, databaseName)){ - databaseName = DatabaseNames.UNDEFINED; - } - return databaseName; } - @Override - public String getDataSource() { - return databaseName; + public final String getDataSource() { + return PluginContext.INSTANCE.getDatabaseName(); } - public NacosDatabaseDialect getDialect() { - return dialect; + public final NacosDatabaseDialect getDialect() { + return PluginContext.INSTANCE.getDialect(); } public String getIdentifierInDb(String identifier){ String string; - switch (identifierQuotedModeInDDL){ + switch (PluginContext.INSTANCE.getIdentifierQuotedModeInDDL()){ case QUOTED: // 这个要求 DDL文件中,所有的表名、列名使用小写形式 - string = dialect.wrapQuote(identifier, Dialect.IdentifierCase.LOWER_CASE); + string = getDialect().wrapQuote(identifier, Dialect.IdentifierCase.LOWER_CASE); break; case UNQUOTED: // 去掉引号 - string = dialect.unwrapQuote(identifier); + string = getDialect().unwrapQuote(identifier); break; case MIXED: default: // 按照数据库对未加引号的默认行为来处理 - string = dialect.wrapQuote(identifier, null); + string = getDialect().wrapQuote(identifier, null); break; } return string; @@ -110,7 +46,7 @@ public abstract class BaseMapper extends AbstractMapper { @Override public String getFunction(String functionName) { - return this.dialect.getFunction(functionName); + return getDialect().getFunction(functionName); } /*************************************************************************** @@ -276,12 +212,6 @@ public abstract class BaseMapper extends AbstractMapper { return sql.toString(); } - protected boolean hasEncryptedDataKeyColumn(){ - String currentVersion = VersionUtils.version; - String[] segments = Strings.split(currentVersion, "."); - String nacosVersion = Strings.join(".", segments, 0, 3); - return VersionUtils.compareVersion(nacosVersion, "2.1.0")>=0; - } private static final String NAMESPACE_PUBLIC_KEY = "public"; protected final String getDefaultTenantId(){ if(getDialect().isAutoCastEmptyStringToNull()){ diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoBetaMapper.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoBetaMapper.java index 3140d54a8f1b238f2d4b5ea7a6bbbd6880f96cd9..d35adcee5d3da6999c48070a6a12e64a923eba87 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoBetaMapper.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoBetaMapper.java @@ -4,6 +4,7 @@ import com.alibaba.nacos.plugin.datasource.mapper.ConfigInfoBetaMapper; import com.alibaba.nacos.plugin.datasource.model.MapperContext; import com.alibaba.nacos.plugin.datasource.model.MapperResult; import com.jn.langx.util.collection.Lists; +import com.jn.nacos.plugin.datasource.NacosEnvs; import com.jn.sqlhelper.dialect.pagination.RowSelection; import java.util.List; @@ -21,7 +22,7 @@ public class CommonConfigInfoBetaMapper extends BaseMapper implements ConfigInfo RowSelection rowSelection = new RowSelection(startRow, pageSize); String subquery = "SELECT id FROM config_info_beta ORDER BY id "; subquery = getDialect().getLimitSql(subquery, true, false, rowSelection); - String sql = "SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips " + (hasEncryptedDataKeyColumn() ? ", encrypted_data_key ":"") + String sql = "SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips " + (NacosEnvs.hasEncryptedDataKeyColumn() ? ", encrypted_data_key ":"") + " FROM ( " + subquery + " )" + " g, config_info_beta t WHERE g.id = t.id"; List paramList = Lists.newArrayList(); diff --git a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoMapper.java b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoMapper.java index 9f7cd07b0ae2c5abe7a8b72358d06fae87fbd7e0..e867feb0f572a563fab5eaf627408bb31c40def0 100644 --- a/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoMapper.java +++ b/nacosplugin-datasource/src/main/java/com/jn/nacos/plugin/datasource/mapper/CommonConfigInfoMapper.java @@ -8,6 +8,7 @@ import com.alibaba.nacos.plugin.datasource.model.MapperResult; import com.jn.langx.util.Strings; import com.jn.langx.util.collection.Collects; import com.jn.langx.util.collection.Lists; +import com.jn.nacos.plugin.datasource.NacosEnvs; import com.jn.sqlhelper.dialect.pagination.RowSelection; import java.sql.Timestamp; @@ -166,7 +167,7 @@ public class CommonConfigInfoMapper extends BaseMapper implements ConfigInfoMapp RowSelection rowSelection = new RowSelection(context.getStartRow(), context.getPageSize()); String sql = "SELECT id,data_id,group_id,tenant_id,app_name," + (needContent ? "content," : "") - + "md5,gmt_modified,type "+ (hasEncryptedDataKeyColumn()? ",encrypted_data_key":"") + + "md5,gmt_modified,type "+ (NacosEnvs.hasEncryptedDataKeyColumn()? ",encrypted_data_key":"") +" FROM config_info WHERE id > ? " + "ORDER BY id ASC "; sql = getDialect().getLimitSql(sql, rowSelection); List queryParams = Lists.newArrayList(context.getWhereParameter(FieldConstant.ID)); diff --git a/pom.xml b/pom.xml index 6a9f01cbb45a9ebdadd1d1b7d1fed47b75a6db4b..26383c7b63b946889254c0a2a717916988c47649 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.bes2008.solution.nacosplugins nacos-plugins - 2.0.6 + 2.0.8 pom ${project.groupId}:${project.artifactId}:${project.version} @@ -27,9 +27,9 @@ 1.23 5.4.4 1.17.0 - 2.4.1 - 5.3.34 - 5.0.5 + 2.4.2 + 5.3.39 + 5.0.7 https://gitee.com/coderjn/nacos-plugins @@ -93,8 +93,6 @@ com.alibaba.nacos nacos-datasource-plugin ${nacos.version} - provided - com.google.guava