网站建设会出现的问题,宁波网络营销推广哪家好,wordpress 获取菜单id,侵权网站怎么做从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 文章目录一…从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 文章目录一、Nacos官方文档二、实现步骤2.1 2.2.0版本源码下载2.2 引入Oracle驱动包2.2.1 nacos-all pom.xml2.2.2 nacos-config pom.xml2.3 nacos-config模块修改2.4 nacos-datasource-plugin模块修改重点2.4.1 DataSourceConstant类修改2.4.2 增加oracle的mapper实现类2.4.3 com.alibaba.nacos.plugin.datasource.mapper.Mapper修改2.5 nacos-console模块修改2.6 Nacos2.2.0适配Oracle12C-建表ddl语句2.7 打包总结一、Nacos官方文档
Nacos整体介绍可看Nacos官方文档
二、实现步骤
下面重点讲解如何通过修改源码实现Oracle适配
2.1 2.2.0版本源码下载
2.2.0版本源码下载
2.2 引入Oracle驱动包
根据适配版本选择对应驱动包
2.2.1 nacos-all pom.xml dependencygroupIdcom.oracle.ojdbc/groupIdartifactIdojdbc8/artifactIdversion${ojdbc.version}/version/dependency2.2.2 nacos-config pom.xml dependencygroupIdcom.oracle.ojdbc/groupIdartifactIdojdbc8/artifactId/dependency2.3 nacos-config模块修改
修改类config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceProperties.java
修改后的代码如下
/** 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.*/package com.alibaba.nacos.config.server.service.datasource;import com.alibaba.nacos.common.utils.Preconditions;
import com.alibaba.nacos.common.utils.StringUtils;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.core.env.Environment;import java.util.ArrayList;
import java.util.List;
import java.util.Objects;import static com.alibaba.nacos.common.utils.CollectionUtils.getOrDefault;/*** Properties of external DataSource.** author Nacos*/
public class ExternalDataSourceProperties {//updateprivate String jdbcDriverName;//updateprivate String testQuery;private Integer num;private ListString url new ArrayList();private ListString user new ArrayList();private ListString password new ArrayList();public void setNum(Integer num) {this.num num;}public void setUrl(ListString url) {this.url url;}public void setUser(ListString user) {this.user user;}public void setPassword(ListString password) {this.password password;}//add newpublic void setTestQuery(String testQuery) {if (StringUtils.isBlank(testQuery)) {this.testQuery SELECT 1;} else {this.testQuery testQuery;}}//add newpublic void setJdbcDriverName(String jdbcDriverName) {if (StringUtils.isBlank(jdbcDriverName)) {this.jdbcDriverName com.mysql.cj.jdbc.Driver;} else {this.jdbcDriverName jdbcDriverName;}}/*** Build serveral HikariDataSource.** param environment {link Environment}* param callback Callback function when constructing data source* return List of {link HikariDataSource}*/ListHikariDataSource build(Environment environment, CallbackHikariDataSource callback) {ListHikariDataSource dataSources new ArrayList();Binder.get(environment).bind(db, Bindable.ofInstance(this));Preconditions.checkArgument(Objects.nonNull(num), db.num is null);Preconditions.checkArgument(CollectionUtils.isNotEmpty(user), db.user or db.user.[index] is null);Preconditions.checkArgument(CollectionUtils.isNotEmpty(password), db.password or db.password.[index] is null);for (int index 0; index num; index) {int currentSize index 1;Preconditions.checkArgument(url.size() currentSize, db.url.%s is null, index);DataSourcePoolProperties poolProperties DataSourcePoolProperties.build(environment);if (StringUtils.isEmpty(poolProperties.getDataSource().getDriverClassName())) {poolProperties.setDriverClassName(jdbcDriverName);}poolProperties.setJdbcUrl(url.get(index).trim());poolProperties.setUsername(getOrDefault(user, index, user.get(0)).trim());poolProperties.setPassword(getOrDefault(password, index, password.get(0)).trim());HikariDataSource ds poolProperties.getDataSource();if (StringUtils.isEmpty(ds.getConnectionTestQuery())) {ds.setConnectionTestQuery(testQuery);}dataSources.add(ds);callback.accept(ds);}Preconditions.checkArgument(CollectionUtils.isNotEmpty(dataSources), no datasource available);return dataSources;}interface CallbackD {/*** Perform custom logic.** param datasource dataSource.*/void accept(D datasource);}
}
2.4 nacos-datasource-plugin模块修改重点
2.4.1 DataSourceConstant类修改
修改类plugin/datasource/src/main/java/com/alibaba/nacos/plugin/datasource/constants/DataSourceConstant.java 修改后的代码如下
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.constants;/*** The data source name.** author hyx**/public class DataSourceConstant {public static final String MYSQL mysql;public static final String DERBY derby;public static final String ORCLE oracle;
}
2.4.2 增加oracle的mapper实现类
先上截图如下新增9个类 在plugin/datasource/src/main/java/com/alibaba/nacos/plugin/datasource/impl/目录新建oracle目录再在oracle目录新增实现类各个类代码如下 1.ConfigInfoAggrMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of ConfigInfoAggrMapper.** author hyx**/public class ConfigInfoAggrMapperByOracle extends AbstractMapper implements ConfigInfoAggrMapper {Overridepublic String batchRemoveAggr(ListString 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 );}Overridepublic 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();}Overridepublic 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;}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 findAllAggrGroupByDistinct() {return SELECT DISTINCT data_id, group_id, tenant_id FROM config_info_aggr;}Overridepublic String getTableName() {return TableConstant.CONFIG_INFO_AGGR;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}
}
2.ConfigInfoBetaMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of ConfigInfoBetaMapper.** author hyx**/public class ConfigInfoBetaMapperByOracle extends AbstractMapper implements ConfigInfoBetaMapper {Overridepublic 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 );}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 getTableName() {return TableConstant.CONFIG_INFO_BETA;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}
}
3.ConfigInfoMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of ConfigInfoMapper.** author hyx**/public class ConfigInfoMapperByOracle 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;Overridepublic String findConfigMaxId() {return SELECT MAX(id) FROM config_info;}Overridepublic String findAllDataIdAndGroup() {return SELECT DISTINCT data_id, group_id FROM config_info;}Overridepublic String findConfigInfoByAppCountRows() {return SELECT count(*) FROM config_info WHERE tenant_id LIKE ? AND app_name ?;}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 configInfoLikeTenantCount() {return SELECT count(*) FROM config_info WHERE tenant_id LIKE ?;}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,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 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 ?;}Overridepublic String findChangeConfigCountRows(MapString, 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 11 ;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;}Overridepublic String findChangeConfigFetchRows(MapString, 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 11 ;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 findAllConfigInfo4Export(ListLong ids, MapString, 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 );ListObject 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;}Overridepublic String findConfigInfoBaseLikeCountRows(MapString, String params) {final String sqlCountRows SELECT count(*) FROM config_info WHERE ;String where 11 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;}Overridepublic String findConfigInfoBaseLikeFetchRows(MapString, 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 11 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 findConfigInfo4PageCountRows(MapString, 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;}Overridepublic String findConfigInfo4PageFetchRows(MapString, 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 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 findConfigInfoLike4PageCountRows(MapString, 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;}Overridepublic String findConfigInfoLike4PageFetchRows(MapString, 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 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();}Overridepublic 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();}Overridepublic String getTableName() {return TableConstant.CONFIG_INFO;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}Overridepublic 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);}
}
4.ConfigInfoTagMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of ConfigInfoTagMapper.** author hyx**/public class ConfigInfoTagMapperByOracle extends AbstractMapper implements ConfigInfoTagMapper {Overridepublic 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 );}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 getTableName() {return TableConstant.CONFIG_INFO_TAG;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}
}
5.ConfigTagsRelationMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of ConfigTagsRelationMapper.** author hyx**/public class ConfigTagsRelationMapperByOracle extends AbstractMapper implements ConfigTagsRelationMapper {Overridepublic 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.idb.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;}Overridepublic 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 * 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.idb.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 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.idb.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;}Overridepublic 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 * 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.idb.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 getTableName() {return TableConstant.CONFIG_TAGS_RELATION;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}
}
6.GroupCapacityMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The derby implementation of {link GroupCapacityMapper}.** author lixiaoshuang*/
public class GroupCapacityMapperByOracle extends AbstractMapper implements GroupCapacityMapper {Overridepublic String getTableName() {return TableConstant.GROUP_CAPACITY;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}Overridepublic 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;}Overridepublic 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 ;}Overridepublic String incrementUsageByWhereQuotaEqualZero() {return UPDATE group_capacity SET usage usage 1, gmt_modified ? WHERE group_id ? AND usage ? AND quota 0;}Overridepublic String incrementUsageByWhereQuotaNotEqualZero() {return UPDATE group_capacity SET usage usage 1, gmt_modified ? WHERE group_id ? AND usage quota AND quota ! 0;}Overridepublic String incrementUsageByWhere() {return UPDATE group_capacity SET usage usage 1, gmt_modified ? WHERE group_id ?;}Overridepublic String decrementUsageByWhere() {return UPDATE group_capacity SET usage usage - 1, gmt_modified ? WHERE group_id ? AND usage 0;}Overridepublic String updateUsage() {return UPDATE group_capacity SET usage (SELECT count(*) FROM config_info), gmt_modified ? WHERE group_id ?;}Overridepublic String updateUsageByWhere() {return UPDATE group_capacity SET usage (SELECT count(*) FROM config_info WHERE group_id? AND tenant_id ), gmt_modified ? WHERE group_id ?;}Overridepublic String selectGroupInfoBySize() {return SELECT id, group_id FROM group_capacity WHERE id ? LIMIT ?;}
}
7.HistoryConfigInfoMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of HistoryConfigInfoMapper.** author hyx**/public class HistoryConfigInfoMapperByOracle extends AbstractMapper implements HistoryConfigInfoMapper {Overridepublic String removeConfigHistory() {return DELETE FROM his_config_info WHERE gmt_modified ? LIMIT ?;}Overridepublic String findConfigHistoryCountByTime() {return SELECT count(*) FROM his_config_info WHERE gmt_modified ?;}Overridepublic 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 ?;}Overridepublic 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;}Overridepublic 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 ?) ;}Overridepublic String getTableName() {return TableConstant.HIS_CONFIG_INFO;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}
}
8.TenantCapacityMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of TenantCapacityMapper.** author hyx**/public class TenantCapacityMapperByOracle extends AbstractMapper implements TenantCapacityMapper {Overridepublic String getTableName() {return TableConstant.TENANT_CAPACITY;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}Overridepublic String incrementUsageWithDefaultQuotaLimit() {return UPDATE tenant_capacity SET usage usage 1, gmt_modified ? WHERE tenant_id ? AND usage ? AND quota 0;}Overridepublic String incrementUsageWithQuotaLimit() {return UPDATE tenant_capacity SET usage usage 1, gmt_modified ? WHERE tenant_id ? AND usage quota AND quota ! 0;}Overridepublic String incrementUsage() {return UPDATE tenant_capacity SET usage usage 1, gmt_modified ? WHERE tenant_id ?;}Overridepublic String decrementUsage() {return UPDATE tenant_capacity SET usage usage - 1, gmt_modified ? WHERE tenant_id ? AND usage 0;}Overridepublic String correctUsage() {return UPDATE tenant_capacity SET usage (SELECT count(*) FROM config_info WHERE tenant_id ?), gmt_modified ? WHERE tenant_id ?;}Overridepublic String getCapacityList4CorrectUsage() {return SELECT id, tenant_id FROM tenant_capacity WHERE id? LIMIT ?;}Overridepublic 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?;;}
}
9.TenantInfoMapperByOracle
/** Copyright 1999-2022 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.*/package com.alibaba.nacos.plugin.datasource.impl.oracle;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;/*** The mysql implementation of TenantInfoMapper.** author hyx**/public class TenantInfoMapperByOracle extends AbstractMapper implements TenantInfoMapper {Overridepublic String getTableName() {return TableConstant.TENANT_INFO;}Overridepublic String getDataSource() {return DataSourceConstant.ORCLE;}
}
2.4.3 com.alibaba.nacos.plugin.datasource.mapper.Mapper修改
修改类plugin/datasource/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mapper
#
# Copyright 1999-2022 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.
#com.alibaba.nacos.plugin.datasource.impl.mysql.ConfigInfoAggrMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.ConfigInfoBetaMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.ConfigInfoMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.ConfigInfoTagMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.ConfigTagsRelationMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.HistoryConfigInfoMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.TenantInfoMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.TenantCapacityMapperByMySql
com.alibaba.nacos.plugin.datasource.impl.mysql.GroupCapacityMapperByMysqlcom.alibaba.nacos.plugin.datasource.impl.derby.ConfigInfoAggrMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.ConfigInfoBetaMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.ConfigInfoMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.ConfigInfoTagMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.ConfigInfoTagsRelationMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.HistoryConfigInfoMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.TenantInfoMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.TenantCapacityMapperByDerby
com.alibaba.nacos.plugin.datasource.impl.derby.GroupCapacityMapperByDerbycom.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoAggrMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoBetaMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoTagMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigTagsRelationMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.HistoryConfigInfoMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.TenantInfoMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.TenantCapacityMapperByOracle
com.alibaba.nacos.plugin.datasource.impl.oracle.GroupCapacityMapperByOracle2.5 nacos-console模块修改
修改配置文件console/src/main/resources/application.properties 只修改一部分数据源连接信息截图如下
nacos.plugin.datasource.log.enabledtrue
spring.sql.init.platformoracle
### Count of DB:
db.num1### Connect URL of DB:
db.url.0jdbc:oracle:thin:192.168.10.2:1521/xe
db.user.0nacos220
db.password.0123456
db.jdbcDriverNameoracle.jdbc.OracleDriver
db.testQueryselect 1 from dual2.6 Nacos2.2.0适配Oracle12C-建表ddl语句
Nacos2.2.0适配Oracle12C-建表ddl语句
2.7 打包
在nacos-all目录下执行mvn命令 mvn -Prelease-nacos -Dmaven.test.skiptrue -Dpmd.skiptrue -Drat.skiptrue -Dcheckstyle.skiptrue clean install -U 最后在distributioni目录下的target就会出现压缩文件了这样就相当于从nacos官网直接下载的压缩包具体nacos配置可以自行完成。 总结
以上就是Nacos2.2.0多数据源适配oracle12C-修改Nacos源码的步骤 曾经淋过雨希望大家都有伞