沈阳做网站公司有哪些,wordpress 表情符号,做界面网站用什么语言好,网站建设 云计算文章目录 1. 概述2. 持久层机制2.1 固定语句2.2 数据源插件 3. 案例演示3.1 编译已实现插件3.2 自定义插件3.3 数据库初始化3.4 插件引入3.4.1 方式一#xff1a;引入到源码3.4.2 方式二#xff1a;插件加载目录 3.5 修改配置3.6 测试 1. 概述
在实际项目开发中#xff0c;… 文章目录 1. 概述2. 持久层机制2.1 固定语句2.2 数据源插件 3. 案例演示3.1 编译已实现插件3.2 自定义插件3.3 数据库初始化3.4 插件引入3.4.1 方式一引入到源码3.4.2 方式二插件加载目录 3.5 修改配置3.6 测试 1. 概述
在实际项目开发中特别是政府项目信创计划要求使用国产数据库所以Nacos 需要支持不同类型的数据库。
Nacos 表结构如下可以看到主要是存储配置、用户、租户相关信息 2. 持久层机制
2.1 固定语句
在 Nacos 2.2 之前的版本中所有的 SQL 操作的执行是通过直接使用 JdbcTemplate 执行固定 SQL 语句的形式使得 SQL 语句与业务逻辑高度耦合并且只支持 Derby 与 MySQL 两种数据源。
原有模块架构如下 Nacos 2.1.1 源码中执行 SQL 示例 如果是 Nacos 2.2 之前的版本想要兼容多种数据库还是比较头疼的官方提供的多中数据源支持分支停留在 1.4.2 版本集成时还需要改造一些代码 2.2 数据源插件
Nacos 从 2.2.0 版本开始实现了通过 SPI 机制注入多数据源插件的方式。将 SQL 操作按照数据表进行抽象出多个 Mapper 接口Mapper 接口的实现类需要按照不同的数据源编写对应的 SQL 方言实现。
架构图如下
在 nacos-plugin 中可以看到包含了很多插件
数据源插件模块 nacos-datasource-plugin-ext 中可以看到已经实现了DM达梦、SQLServer、Oracle、PostgreSQL 3. 案例演示
注意事项
目前多数据源插件处于 Beta 测试阶段其 API 及接口方法定义可能会在后续版本升级而有较大修改请注意您的插件适用版本这里使用的是 Nacos 2.3.2 版本
3.1 编译已实现插件
nacos-plugin 已经实现了多个数据库支持但是目前仍然处于开发阶段需要拉取源码自行编译。拉取到本地后切换到 develop 开发分支。
首先需要将 alibaba-nacos.version 修改为最新的 2.3.2 版本原先引入的是 2.3.0-SNAPSHOT 快照版本本地和 Maven 仓库肯定都是没有的 然后执行 mvn install 安装到本地仓库这里建议上传到公司的 Maven 仓库。
3.2 自定义插件
针对 nacos-plugin 没有实现的数据库需要自定义实现这里只是简单示例实际是复制了 nacos-postgresql-datasource-plugin-ext 相关代码。
在 nacos-plugin 中的 nacos-datasource-plugin-ext 下创建自定义插件模块引入数据库驱动、数据源插件基础依赖 parentartifactIdnacos-datasource-plugin-ext/artifactIdgroupIdcom.alibaba.nacos/groupIdversion${revision}/version/parentmodelVersion4.0.0/modelVersionartifactIdnacos-postgresql-datasource-plugin-ext/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetjdbc.postgresql.version42.2.19/jdbc.postgresql.version/propertiesdependenciesdependencygroupIdorg.postgresql/groupIdartifactIdpostgresql/artifactIdversion${jdbc.postgresql.version}/version/dependencydependencygroupIdcom.alibaba.nacos/groupIdartifactIdnacos-datasource-plugin-ext-base/artifactIdversion${revision}/versionscopecompile/scope/dependency/dependencies实现 AbstractDatabaseDialect 数据库方言接口设置数据库类型、重写相关分页关键字方法
public class PostgresqlDatabaseDialect extends AbstractDatabaseDialect {Overridepublic String getType() {return DatabaseTypeConstant.POSTGRESQL;}Overridepublic String getLimitTopSqlWithMark(String sql) {return sql LIMIT ? ;}Overridepublic String getLimitPageSqlWithMark(String sql) {return sql OFFSET ? LIMIT ? ;}Overridepublic String getLimitPageSql(String sql, int pageNo, int pageSize) {return sql OFFSET getPagePrevNum(pageNo, pageSize) LIMIT pageSize;}Overridepublic String getLimitPageSqlWithOffset(String sql, int startOffset, int pageSize){return sql OFFSET startOffset LIMIT pageSize;}}继承相关 BaseMapper 类重写一些 Mapper 接口中的特殊 SQL 方法 编写 SPI 配置文件引入方言类、自定义 Mapper 提供修改后对应的数据库初始化SQL脚本 3.3 数据库初始化
这里使用 PostgreSQL进行演示新建数据库找到对应的脚本执行即可 3.4 插件引入
3.4.1 方式一引入到源码
在 Nacos 2.3.2 源码中的 plugin/datasource/pom.xml 文件中引入插件依赖 这里只引入了 PostgreSQL 也可以引入多个 dependencygroupIdcom.alibaba.nacos/groupIdartifactIdnacos-postgresql-datasource-plugin-ext/artifactIdversion1.0.0-SNAPSHOT/version/dependency执行打包命令
mvn -Prelease-nacos -Dmaven.test.skiptrue -Dpmd.skiptrue -Drat.skiptrue -Dcheckstyle.skiptrue clean install -U在源码 nacos-2.3.2\distribution\target\nacos-server-2.3.2\nacos目录下可以看到打包后的项目 可以查看 nacos-server.jar 中是否已包含当前数据库驱动 3.4.2 方式二插件加载目录
在 Nacos 的启动脚本中可以看到有一个 loader.path 启动参数 Nacos 支持通过指定路径加载插件 所以可以直接将编译后的 jar 包可以多个放入到 nacos/plugins 目录中 3.5 修改配置
修改 application.properties 配置文件添加数据库配置
### Deprecated configuration property, it is recommended to use spring.sql.init.platform replaced.
# spring.datasource.platformmysql
spring.sql.init.platformpostgresql### Count of DB:
db.num1### Connect URL of DB:
db.url.0jdbc:postgresql://127.0.0.1:5432/nacos?tcpKeepAlivetruereWriteBatchedInsertstrueApplicationNamenacos_java
db.userpostgres
db.password123456### Connection pool configuration: hikariCP
db.pool.config.driverClassNameorg.postgresql.Driver
db.pool.config.connectionTimeout30000
db.pool.config.validationTimeout10000
db.pool.config.maximumPoolSize20
db.pool.config.minimumIdle2
#如果是 oracle 则需要改为 SELECT * FROM dual
#db.pool.config.connectionTestQuerySELECT 13.6 测试
启动 Nacos 添加配置、用户查看数据库