如何做學校網(wǎng)站產(chǎn)品軟文模板
文章目錄
- 1. 概述
- 2. 持久層機制
- 2.1 固定語句
- 2.2 數(shù)據(jù)源插件
- 3. 案例演示
- 3.1 編譯已實現(xiàn)插件
- 3.2 自定義插件
- 3.3 數(shù)據(jù)庫初始化
- 3.4 插件引入
- 3.4.1 方式一:引入到源碼
- 3.4.2 方式二:插件加載目錄
- 3.5 修改配置
- 3.6 測試
1. 概述
在實際項目開發(fā)中,特別是政府項目,信創(chuàng)計劃要求使用國產(chǎn)數(shù)據(jù)庫,所以Nacos
需要支持不同類型的數(shù)據(jù)庫。
Nacos
表結構如下,可以看到主要是存儲配置、用戶、租戶相關信息:
2. 持久層機制
2.1 固定語句
在 Nacos 2.2
之前的版本中,所有的 SQL
操作的執(zhí)行是通過直接使用 JdbcTemplate
執(zhí)行固定 SQL
語句的形式,使得 SQL
語句與業(yè)務邏輯高度耦合,并且只支持 Derby
與 MySQL
兩種數(shù)據(jù)源。
原有模塊架構如下:
Nacos 2.1.1
源碼中執(zhí)行 SQL
示例:
如果是 Nacos 2.2
之前的版本,想要兼容多種數(shù)據(jù)庫還是比較頭疼的,官方提供的多中數(shù)據(jù)源支持分支停留在 1.4.2
版本,集成時還需要改造一些代碼:
2.2 數(shù)據(jù)源插件
Nacos
從 2.2.0
版本開始,實現(xiàn)了通過 SPI
機制注入多數(shù)據(jù)源插件的方式。將 SQL
操作按照數(shù)據(jù)表進行抽象出多個 Mapper
接口,Mapper
接口的實現(xiàn)類需要按照不同的數(shù)據(jù)源編寫對應的 SQL
方言實現(xiàn)。
架構圖如下:
在 nacos-plugin 中,可以看到包含了很多插件:
數(shù)據(jù)源插件模塊 nacos-datasource-plugin-ext
中,可以看到已經(jīng)實現(xiàn)了DM
(達夢)、SQLServer
、Oracle
、PostgreSQL
:
3. 案例演示
注意事項:
- 目前多數(shù)據(jù)源插件處于
Beta
測試階段,其API
及接口方法定義可能會在后續(xù)版本升級而有較大修改,請注意您的插件適用版本 - 這里使用的是
Nacos 2.3.2
版本
3.1 編譯已實現(xiàn)插件
nacos-plugin 已經(jīng)實現(xiàn)了多個數(shù)據(jù)庫支持,但是目前仍然處于開發(fā)階段,需要拉取源碼自行編譯。拉取到本地后,切換到 develop
開發(fā)分支。
首先需要將 alibaba-nacos.version
修改為最新的 2.3.2
版本,原先引入的是 2.3.0-SNAPSHOT
快照版本,本地和 Maven
倉庫肯定都是沒有的:
然后執(zhí)行 mvn install
安裝到本地倉庫,這里建議上傳到公司的 Maven
倉庫。
3.2 自定義插件
針對 nacos-plugin 沒有實現(xiàn)的數(shù)據(jù)庫,需要自定義實現(xiàn)(這里只是簡單示例,實際是復制了 nacos-postgresql-datasource-plugin-ext
相關代碼)。
在 nacos-plugin 中的 nacos-datasource-plugin-ext
下創(chuàng)建自定義插件模塊,引入數(shù)據(jù)庫驅動、數(shù)據(jù)源插件基礎依賴:
<parent><artifactId>nacos-datasource-plugin-ext</artifactId><groupId>com.alibaba.nacos</groupId><version>${revision}</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-postgresql-datasource-plugin-ext</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><jdbc.postgresql.version>42.2.19</jdbc.postgresql.version></properties><dependencies><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>${jdbc.postgresql.version}</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-datasource-plugin-ext-base</artifactId><version>${revision}</version><scope>compile</scope></dependency></dependencies>
實現(xiàn) AbstractDatabaseDialect
數(shù)據(jù)庫方言接口,設置數(shù)據(jù)庫類型、重寫相關分頁關鍵字方法:
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
,提供修改后對應的數(shù)據(jù)庫初始化SQL
腳本:
3.3 數(shù)據(jù)庫初始化
這里使用 PostgreSQL
進行演示,新建數(shù)據(jù)庫,找到對應的腳本執(zhí)行即可:
3.4 插件引入
3.4.1 方式一:引入到源碼
在 Nacos 2.3.2
源碼中的 plugin/datasource/pom.xml
文件中,引入插件依賴:
這里只引入了 PostgreSQL
,也可以引入多個:
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-postgresql-datasource-plugin-ext</artifactId><version>1.0.0-SNAPSHOT</version></dependency>
執(zhí)行打包命令:
mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Drat.skip=true -Dcheckstyle.skip=true clean install -U
在源碼 nacos-2.3.2\distribution\target\nacos-server-2.3.2\nacos
目錄下,可以看到打包后的項目:
可以查看 nacos-server.jar
中是否已包含當前數(shù)據(jù)庫驅動:
3.4.2 方式二:插件加載目錄
在 Nacos
的啟動腳本中,可以看到有一個 loader.path
啟動參數(shù), Nacos
支持通過指定路徑加載插件:
所以可以直接將編譯后的 jar
包(可以多個)放入到 nacos/plugins
目錄中:
3.5 修改配置
修改 application.properties
配置文件,添加數(shù)據(jù)庫配置:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
# spring.datasource.platform=mysql
spring.sql.init.platform=postgresql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?tcpKeepAlive=true&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user=postgres
db.password=123456### Connection pool configuration: hikariCP
db.pool.config.driverClassName=org.postgresql.Driver
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
#如果是 oracle 則需要改為 SELECT * FROM dual
#db.pool.config.connectionTestQuery=SELECT 1
3.6 測試
啟動 Nacos
,添加配置、用戶,查看數(shù)據(jù)庫: