mirror of
https://gitee.com/dromara/dbswitch.git
synced 2025-10-16 06:40:23 +00:00
文档相关补充
This commit is contained in:
163
ADD_PRODUCT_DOC.md
Normal file
163
ADD_PRODUCT_DOC.md
Normal file
@@ -0,0 +1,163 @@
|
||||
# 接入新的自定义关系型数据库的开发说明文档
|
||||
|
||||
### 1、背景说明
|
||||
|
||||
虽然dbswitch已经集成支持了MySQL、Oracle、SQLServer、PostgreSQL、DB2、SBase、MariaDB、SQLite、Hive及
|
||||
DM、Kingbase、OSCar、GBase等部分国产数据库。但近些年关系型数据库不断涌现,不过基本上都是类似或兼容MySQL、Oracle、
|
||||
PostgreSQL等数据库的,只是存在某些特殊的语法情况而已。为此,为方便适配这些新的数据库接入到dbswitch中来,编写此说明 文档,方便开发者快速的开发新的适配数据库的模块。
|
||||
|
||||
### 2、开发步骤说明
|
||||
|
||||
> 这里以新增openguass为例:
|
||||
|
||||
**(1) dbswitch-product下新建子模块:**
|
||||
|
||||
在模块dbswitch-product下新建子模块,例如:dbswitch-product-openguass,并在pom.xml中配置如下依赖:
|
||||
|
||||
```
|
||||
<dependency>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
**(2) 添加新的数据库产品类型枚举值:**
|
||||
|
||||
在dbswitch-common模块里,找到com.gitee.dbswitch.common.type.ProductTypeEnum的定义,并在最后追加以数据库产品 命名的枚举字符串,例如:
|
||||
|
||||
```
|
||||
/**
|
||||
* OpenGauss数据库类型
|
||||
*/
|
||||
OPENGAUSS(14, "\"", "opengauss", "org.opengauss.Driver", 15432,
|
||||
"SELECT 1",
|
||||
"jdbc:opengauss://",
|
||||
new String[]{"jdbc:opengauss://{host}[:{port}]/[{database}][\\?{params}]"}),
|
||||
```
|
||||
|
||||
枚举值的附带信息对应如下:
|
||||
|
||||
- 编号: 14
|
||||
- 限定符: " (单双引号)
|
||||
- 产品名字符串: opengauss
|
||||
- 驱动类名: org.opengauss.Driver
|
||||
- 默认端口号: 15432
|
||||
- 测试连接使用的SQL: SELECT 1
|
||||
- JDBC连接串的前缀: jdbc:opengauss://
|
||||
- JDBC连接串的模板: jdbc:opengauss://{host}[:{port}]/[{database}][\\?{params}]
|
||||
|
||||
**(3) 编写对接实现模块dbswitch-product-openguass的java代码:**
|
||||
|
||||
```
|
||||
[root@localhost dbswitch-product-opengauss]# tree .
|
||||
.
|
||||
├── pom.xml
|
||||
└── src
|
||||
└── main
|
||||
├── java
|
||||
│ └── com
|
||||
│ └── gitee
|
||||
│ └── dbswitch
|
||||
│ └── product
|
||||
│ └── openguass
|
||||
│ ├── OpenGaussFactoryProvider.java
|
||||
│ ├── OpenGaussFeatures.java
|
||||
│ ├── OpenGaussMetadataQueryProvider.java
|
||||
│ └── OpenGaussTableOperateProvider.java
|
||||
└── resources
|
||||
└── META-INF
|
||||
└── services
|
||||
└── dbswitch.providers
|
||||
```
|
||||
|
||||
其中OpenGaussFactoryProvider.java必须继承自com.gitee.dbswitch.provider.AbstractFactoryProvider,并带有@Product注解:
|
||||
|
||||
```
|
||||
@Product(ProductTypeEnum.OPENGAUSS)
|
||||
public class OpenGaussFactoryProvider extends AbstractFactoryProvider {
|
||||
|
||||
// 构造函数必须以DataSource作为参数类型,并传递给父类
|
||||
public OpenGaussFactoryProvider(DataSource dataSource) {
|
||||
super(dataSource);
|
||||
}
|
||||
|
||||
// 这里提供数据库特征配置实现对象(可参见OpenGaussFeatures的定义,目前基本上为空类)
|
||||
@Override
|
||||
public ProductFeatures getProductFeatures() {
|
||||
return new OpenGaussFeatures();
|
||||
}
|
||||
|
||||
// 这里提供数据库元数据查询的实现对象,继承自com.gitee.dbswitch.provider.meta.AbstractMetadataProvider
|
||||
// 这里需编写类OpenGaussMetadataQueryProvider查询元数据信息的实现代码
|
||||
@Override
|
||||
public MetadataProvider createMetadataQueryProvider() {
|
||||
return new OpenGaussMetadataQueryProvider(this);
|
||||
}
|
||||
|
||||
// 这里提供对数据库表的drop和truncate操作的实现对象,继承自com.gitee.dbswitch.provider.operate.DefaultTableOperateProvider
|
||||
@Override
|
||||
public TableOperateProvider createTableOperateProvider() {
|
||||
return new OpenGaussTableOperateProvider(this);
|
||||
}
|
||||
|
||||
// 这里提供对数据库表的批量插入数据操作的实现对象,继承自com.gitee.dbswitch.provider.write.DefaultTableDataWriteProvider
|
||||
// 也可配置为 new AutoCastTableDataWriteProvider(this);
|
||||
@Override
|
||||
public TableDataWriteProvider createTableDataWriteProvider(boolean useInsert) {
|
||||
return new AutoCastTableDataWriteProvider(this);
|
||||
}
|
||||
|
||||
// 这里提供对数据库表数据的Insert、Update、Delete同步操作的实现对象,继承自com.gitee.dbswitch.provider.sync.DefaultTableDataSynchronizer
|
||||
// 也可配置为 new AutoCastTableDataSynchronizer(this);
|
||||
@Override
|
||||
public TableDataSynchronizer createTableDataSynchronizer() {
|
||||
return new AutoCastTableDataSynchronizer(this);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
**(4) 添加dbswitch.providers实现类配置:**
|
||||
在文件resources/META-INF/services/dbswitch.providers(需要创建)中,添加上述实现类的全类名:
|
||||
|
||||
```
|
||||
[root@localhost dbswitch-product-opengauss]# cat src/main/resources/META-INF/services/dbswitch.providers
|
||||
com.gitee.dbswitch.product.openguass.OpenGaussFactoryProvider
|
||||
```
|
||||
|
||||
**(5) 为dbswitch-register-product增加依赖:**
|
||||
|
||||
在dbswitch-product/dbswitch-register-product/pom.xml中增加依赖:
|
||||
|
||||
```
|
||||
<!-- 新增加的数据库产品需要在这里追加依赖-->
|
||||
<dependency>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-product-openguass</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
**(6) 根目录下的drivers下添加驱动jar文件
|
||||
|
||||
在根目录下的drivers/opengauss/opengauss-3.0.0/下增加对应的版本的驱动jar文件。
|
||||
|
||||
|
||||
|
||||
|
||||
完成上述的开发内容后,即可使用根目录下的build.sh(linux/MacOS下)或build.cmd(windows下)进行打包后部署了。如果成功会在日志中
|
||||
有如下内容的输出,包含有新添加的OPENGAUSS注册的信息:
|
||||
```
|
||||
2023-01-28 21:35:13.768 [main] INFO c.g.d.p.r.ProductRegisterAutoConfiguration - Register database product now ...
|
||||
...
|
||||
2023-01-28 21:35:13.787 [main] INFO com.gitee.dbswitch.provider.ProductProviderFactory - Register product OPENGAUSS by subclass :com.gitee.dbswitch.product.openguass.OpenGaussFactoryProvider
|
||||
....
|
||||
2023-01-28 21:35:13.805 [main] INFO c.g.d.p.r.ProductRegisterAutoConfiguration - Finish to register total 14 database product !
|
||||
```
|
14
README.md
14
README.md
@@ -534,15 +534,21 @@ bin/startup.sh
|
||||
|
||||
> 多个任务并发执行不易于分析任务错误原因;
|
||||
|
||||
## 四、模块集成开发说明
|
||||
## 四、模块开发说明
|
||||
|
||||
### 1、dbswitch安装到本地仓库
|
||||
### 1、集成支持新的关系型数据库产品
|
||||
|
||||
参考教程: [接入自定义关系型数据库的开发说明文档](ADD_PRODUCT_DOC.md)
|
||||
|
||||
### 2、集成dbswitch模块进行二次开发
|
||||
|
||||
#### (1)、dbswitch安装到本地仓库
|
||||
|
||||
```
|
||||
cd dbswitch && mvn clean install
|
||||
```
|
||||
|
||||
### 2、pom.xml中引入dbswitch模块依赖
|
||||
#### (2)、pom.xml中引入dbswitch模块依赖
|
||||
|
||||
```
|
||||
<dependency>
|
||||
@@ -552,7 +558,7 @@ cd dbswitch && mvn clean install
|
||||
</dependency>
|
||||
```
|
||||
|
||||
### 3、代码集成开发
|
||||
#### (3)、代码集成开发
|
||||
|
||||
```
|
||||
// 构建任务执行的线程池
|
||||
|
@@ -51,7 +51,7 @@ public class DefaultTableDataQueryProvider
|
||||
public void setQueryFetchSize(int size) {
|
||||
if (size < Constants.MINIMUM_FETCH_SIZE) {
|
||||
throw new IllegalArgumentException(
|
||||
"设置的批量处理行数的大小fetchSize不得小于" + Constants.MINIMUM_FETCH_SIZE);
|
||||
"设置的批量处理行数的大小fetchSize=" + size + "不得小于" + Constants.MINIMUM_FETCH_SIZE);
|
||||
}
|
||||
this.fetchSize = size;
|
||||
}
|
||||
|
@@ -13,8 +13,4 @@ import com.gitee.dbswitch.features.ProductFeatures;
|
||||
|
||||
public class HiveFeatures implements ProductFeatures {
|
||||
|
||||
public int convertFetchSize(int fetchSize) {
|
||||
return Integer.MIN_VALUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@ public class OpenGaussFactoryProvider extends AbstractFactoryProvider {
|
||||
super(dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductFeatures getProductFeatures() {
|
||||
return new OpenGaussFeatures();
|
||||
}
|
||||
|
8
pom.xml
8
pom.xml
@@ -19,6 +19,14 @@
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
</properties>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>tang</name>
|
||||
<email>inrgihc@126.com</email>
|
||||
<url>https://gitee.com/inrgihc/dbswitch</url>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<modules>
|
||||
<module>dbswitch-common</module>
|
||||
<module>dbswitch-core</module>
|
||||
|
Reference in New Issue
Block a user