# huaweicloud-batchCreateJobs-Java
**Repository Path**: HuaweiCloudDeveloper/huaweicloud-batch-create-jobs-java
## Basic Information
- **Project Name**: huaweicloud-batchCreateJobs-Java
- **Description**: 根据请求参数不同,可以批量创建实时迁移、实时同步、实时灾备任务, 该示例展示如何通过数据复制服务SDK创建MySQL迁移入云任务,从创建实例、测试连接、修改任务、对象选择,预检查到启动任务的全过程。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master-dev
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-09-16
- **Last Updated**: 2023-11-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 1.介绍
数据复制服务(Data Replication Service,简称DRS)是一种易用、稳定、高效、用于数据库实时迁移和数据库实时同步的云服务。
数据复制服务围绕云数据库,降低了数据库之间数据流通的复杂性,有效地帮助您减少数据传输的成本。
您可通过数据复制服务快速解决多场景下,数据库之间的数据流通问题,以满足数据传输业务需求。
数据复制服务提供了实时迁移、备份迁移、实时同步、数据订阅和实时灾备等多种功能。该示例展示了如何通过Java版SDK创建DRS迁移入云任务。
## 2.流程图
华为云提供了DRS服务端SDK,您可以直接集成服务端SDK来调用DRS的相关API,从而实现对DRS任务的快速操作。该示例展示了MySQL实时迁移任务创建流程

## 3.前置条件
- 1、获取华为云开发工具包(SDK),您也可以查看安装JAVA SDK。
- 2、要使用华为云 Java SDK,您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)。具体请参见:[访问秘钥](https://support.huaweicloud.com/usermanual-ca/zh-cn_topic_0046606340.html)
- 3、华为云 Java SDK 支持 **Java JDK 1.8** 及其以上版本。
- 4、准备两个MySQL实例。
## 4.SDK获取和安装
您可以通过Maven配置所依赖的SDK,具体的SDK版本号请参见 [SDK开发中心](https://sdkcenter.developer.huaweicloud.com/) 。
```xml
com.huaweicloud.sdk
huaweicloud-sdk-drs
3.0.95
```
## 5.关键代码片段
```java
public static void main(String[] args) {
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
ICredential auth = new BasicCredentials().withAk(ak).withSk(sk);
// 配置客户端属性
HttpConfig config = HttpConfig.getDefaultHttpConfig();
config.withIgnoreSSLVerification(true);
// 创建DrsClient实例
DrsClient client = DrsClient.newBuilder().withCredential(auth).withHttpConfig(config)
.withRegion(DrsRegion.CN_NORTH_4).build();
BatchCreateJobsRequest request = getBatchCreateJobsRequest();
try {
BatchCreateJobsResponse response = client.batchCreateJobs(request);
if (response.getHttpStatusCode() == 202) {
List results = response.getResults();
CreateJobResp createJobResp = results.get(0);
String status = createJobResp.getStatus();
// 任务状态为配置中才能进行下一步操作
while (!QueryJobsReq.StatusEnum.CONFIGURATION.getValue().equals(status)) {
TimeUnit.SECONDS.sleep(20);
BatchListJobStatusRequest batchListProgressesRequest = new BatchListJobStatusRequest();
BatchQueryJobReqPage batchQueryJobReqPage = new BatchQueryJobReqPage();
List jobs = new ArrayList<>();
jobs.add(createJobResp.getId());
batchQueryJobReqPage.withJobs(jobs);
batchListProgressesRequest.setBody(batchQueryJobReqPage);
BatchListJobStatusResponse batchListJobStatusResponse = client.batchListJobStatus(batchListProgressesRequest);
status = batchListJobStatusResponse.getResults().get(0).getStatus().getValue();
}
// 测试连接失败返回
if (connectionFail(client, createJobResp)) {
return;
}
// 源库,目标库都连接成功,更新任务信息
BatchUpdateJobRequest batchUpdateJobRequest = getBatchUpdateJobRequest(createJobResp);
BatchUpdateJobResponse batchUpdateJobResponse = client.batchUpdateJob(batchUpdateJobRequest);
if (batchUpdateJobResponse.getHttpStatusCode() != 200) {
logger.error(batchUpdateJobResponse.getResults().toString());
return;
}
// 更新任务成功后,设置同步对象
BatchSetObjectsResponse batchSetObjectsResponse = getBatchSetObjectsResponse(client, createJobResp);
if (batchSetObjectsResponse.getHttpStatusCode() != 202) {
logger.error(batchSetObjectsResponse.getResults().toString());
return;
}
// 预检查
if (precheckFail(client, createJobResp)) {
return;
}
// 查询预检查结果
String totalPassedRate = getTotalPassedRate(client, createJobResp);
// 通过率为100%时启动任务
startJob(client, createJobResp, totalPassedRate);
}
logger.error(response.toString());
} catch (ClientRequestException e) {
logger.error(e.getMessage());
} catch (ServerResponseException e) {
logger.error(e.getMessage());
} catch (InterruptedException e) {
logger.error(e.getMessage());
}
}
```
## 6.返回结果示例
```java
批量创建任务:
[class BatchCreateJobsResponse {
results: [class CreateJobResp {
id: d6c96cbd-7cfd-474d-8bef-06fd004jb101
name: DRS-test-demo
status: CREATING
createTime: 1663231048713
}]
count: 1
}]
批量测试连接:
[class CheckJobResp {
id: 6916b750-f0fd-4b21-9712-f097a64jb101
status: success
errorCode: null
errorMsg: null
success: true
}, class CheckJobResp {
id: 6916b750-f0fd-4b21-9712-f097a64jb101
status: success
errorCode: null
errorMsg: null
success: true
}]
批量修改任务:
[class ModifyJobResp {
id: 6916b750-f0fd-4b21-9712-f097a64jb101
status: success
errorCode: null
errorMsg: null
}]
批量数据库对象选择:
[class DatabaseObjectResp {
jobId: 6916b750-f0fd-4b21-9712-f097a64jb101
status: true
errorCode: null
errorMsg: null
}]
批量预检查:
[class PostPreCheckResp {
id: 6916b750-f0fd-4b21-9712-f097a64jb101
precheckId: 6916b750-f0fd-4b21-9712-f097a64jb101
status: success
errorCode: null
errorMsg: null
}]
批量查询预检查结果:
[class QueryPreCheckResp {
precheckId: 6916b750-f0fd-4b21-9712-f097a64jb101
result: true
process: 100%
totalPassedRate: 100%
rdsInstanceId: e1c47103b403450bafc8d43f914f0e2din01
jobDirection: up
precheckResult: [class PrecheckResult {
item: dstDbDiskSize
result: PASSED
failedReason: null
data: {"srcDbSize":"0","dstVolumeSize":"36300000000","srcIndexSize":0,"srcIndexAmount":0,"diskSizeNeed":"0"}
rawErrorMsg: null
group: db_disk_size
failedSubJobs: null
}, class PrecheckResult {
item: checkIncreSrcDbExistedInDstDb
result: PASSED
failedReason: null
data: null
rawErrorMsg: null
group: db_params
failedSubJobs: null
},... class PrecheckResult {
item: dstDbConnection
result: PASSED
failedReason: null
data: null
rawErrorMsg: null
group: network
failedSubJobs: null
},.. class PrecheckResult {
item: srcDbConnection
result: PASSED
failedReason: null
data: null
rawErrorMsg: null
group: network
failedSubJobs: null
}]
errorMsg: null
errorCode: null
}]
批量启动任务:
[class StartJobResp {
id: 6916b750-f0fd-4b21-9712-f097a64jb101
status: success
errorCode: null
errorMsg: null
}]
```
## 7.参考链接
更多详细信息请参考以下接口:
- 创建迁移实例:[批量创建任务](https://support.huaweicloud.com/api-drs/drs_03_0104.html)
- 查询任务创建进度:[批量查询任务状态](https://support.huaweicloud.com/api-drs/drs_api_0150.html)
- 更新任务信息:先调用[批量测试连接](https://support.huaweicloud.com/api-drs/drs_03_0105.html), 成功之后调用[批量修改任务](https://support.huaweicloud.com/api-drs/drs_03_0107.html)
- 添加需要迁移的库表信息:[批量数据库对象选择](https://support.huaweicloud.com/api-drs/drs_03_0109.html)
- 执行预检查:[批量预检查](https://support.huaweicloud.com/api-drs/drs_03_0110.html) [批量查询预检查结果](https://support.huaweicloud.com/api-drs/drs_03_0111.html)
- 源库,目标库参数对比:[批量获取数据库参数](https://support.huaweicloud.com/api-drs/drs_03_0141.html) [修改数据库参数](https://support.huaweicloud.com/api-drs/drs_03_0131.html)
- 启动任务:[批量启动任务](https://support.huaweicloud.com/api-drs/drs_03_0112.html)
## 8.修订记录
| 发布日期 | 文档版本 | 修订说明 |
| :--------: | :------: | :----------: |
| 2022-09-19 | 1.0 | 文档首次发布 |