DataX 3.0 在Windows下基于MySQL做数据迁移示例

news2025/2/12 19:45:53

在 Windows 安装 Datax:

Datax 官网:https://github.com/alibaba/DataX

环境要求:

1:JDK(1.8以上,推荐1.8,并配置好环境变量)

2:Python(网上推荐Python2.7.X,本人Python3.10亲测没问题。并配置好环境变量)

3:Maven(建议不低于maven3.5,并配置好环境变量)

Datax 安装:

1:下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202303/datax.tar.gz

2:下载后解压至本地某个目录,进入bin目录。我本地解压的路径(D:\datax)

测试Datax安装

执行cmd命令进入Datax下的bin目录。我Datax解压到 D:\datax,所以具体进入路径是 D:\datax\bin

cd D:\datax\bin

第一步先输入CHCP 65001命令防止控制台中文乱码,第二步再进行自检脚本命令

CHCP 65001

python .\datax.py ..\job\job.json

会得到如下结果:

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.


2023-06-14 13:09:32.800 [main] INFO  MessageSource - JVM TimeZone: GMT+08:00, Locale: zh_CN
2023-06-14 13:09:32.803 [main] INFO  MessageSource - use Locale: zh_CN timeZone: sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
2023-06-14 13:09:32.813 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2023-06-14 13:09:32.818 [main] INFO  Engine - the machine info  =>

        osInfo: Oracle Corporation 1.8 25.361-b09
        jvmInfo:        Windows 10 amd64 10.0
        cpu num:        8

        totalPhysicalMemory:    -0.00G
        freePhysicalMemory:     -0.00G
        maxFileDescriptorCount: -1
        currentOpenFileDescriptorCount: -1

        GC Names        [PS MarkSweep, PS Scavenge]

        MEMORY_NAME                    | allocation_size                | init_size
        PS Eden Space                  | 256.00MB                       | 256.00MB
        Code Cache                     | 240.00MB                       | 2.44MB
        Compressed Class Space         | 1,024.00MB                     | 0.00MB
        PS Survivor Space              | 42.50MB                        | 42.50MB
        PS Old Gen                     | 683.00MB                       | 683.00MB
        Metaspace                      | -0.00MB                        | 0.00MB


2023-06-14 13:09:32.828 [main] INFO  Engine -
{
        "setting":{
                "speed":{
                        "channel":1
                },
                "errorLimit":{
                        "record":0,
                        "percentage":0.02
                }
        },
        "content":[
                {
                        "reader":{
                                "name":"streamreader",
                                "parameter":{
                                        "column":[
                                                {
                                                        "value":"DataX",
                                                        "type":"string"
                                                },
                                                {
                                                        "value":19890604,
                                                        "type":"long"
                                                },
                                                {
                                                        "value":"1989-06-04 00:00:00",
                                                        "type":"date"
                                                },
                                                {
                                                        "value":true,
                                                        "type":"bool"
                                                },
                                                {
                                                        "value":"test",
                                                        "type":"bytes"
                                                }
                                        ],
                                        "sliceRecordCount":100000
                                }
                        },
                        "writer":{
                                "name":"streamwriter",
                                "parameter":{
                                        "print":false,
                                        "encoding":"UTF-8"
                                }
                        }
                }
        ]
}

2023-06-14 13:09:32.846 [main] INFO  PerfTrace - PerfTrace traceId=job_-1, isEnable=false
2023-06-14 13:09:32.846 [main] INFO  JobContainer - DataX jobContainer starts job.
2023-06-14 13:09:32.847 [main] INFO  JobContainer - Set jobId = 0
2023-06-14 13:09:32.863 [job-0] INFO  JobContainer - jobContainer starts to do prepare ...
2023-06-14 13:09:32.864 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] do prepare work .
2023-06-14 13:09:32.864 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do prepare work .
2023-06-14 13:09:32.864 [job-0] INFO  JobContainer - jobContainer starts to do split ...
2023-06-14 13:09:32.865 [job-0] INFO  JobContainer - Job set Channel-Number to 1 channels.
2023-06-14 13:09:32.865 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] splits to [1] tasks.
2023-06-14 13:09:32.865 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] splits to [1] tasks.
2023-06-14 13:09:32.889 [job-0] INFO  JobContainer - jobContainer starts to do schedule ...
2023-06-14 13:09:32.892 [job-0] INFO  JobContainer - Scheduler starts [1] taskGroups.
2023-06-14 13:09:32.893 [job-0] INFO  JobContainer - Running by standalone Mode.
2023-06-14 13:09:32.900 [taskGroup-0] INFO  TaskGroupContainer - taskGroupId=[0] start [1] channels for [1] tasks.
2023-06-14 13:09:32.904 [taskGroup-0] INFO  Channel - Channel set byte_speed_limit to -1, No bps activated.
2023-06-14 13:09:32.904 [taskGroup-0] INFO  Channel - Channel set record_speed_limit to -1, No tps activated.
2023-06-14 13:09:32.913 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] attemptCount[1] is started
2023-06-14 13:09:33.240 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] is successed, used[328]ms
2023-06-14 13:09:33.241 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] completed it's tasks.
2023-06-14 13:09:42.913 [job-0] INFO  StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.018s |  All Task WaitReaderTime 0.026s | Percentage 100.00%
2023-06-14 13:09:42.914 [job-0] INFO  AbstractScheduler - Scheduler accomplished all tasks.
2023-06-14 13:09:42.914 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do post work.
2023-06-14 13:09:42.914 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] do post work.
2023-06-14 13:09:42.915 [job-0] INFO  JobContainer - DataX jobId [0] completed successfully.
2023-06-14 13:09:42.915 [job-0] INFO  HookInvoker - No hook invoked, because base dir not exists or is a file: D:\datax\hook
2023-06-14 13:09:42.917 [job-0] INFO  JobContainer -
         [total cpu info] =>
                averageCpu                     | maxDeltaCpu                    | minDeltaCpu
                -1.00%                         | -1.00%                         | -1.00%


         [total gc info] =>
                 NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime
                 PS MarkSweep         | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s
                 PS Scavenge          | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s

2023-06-14 13:09:42.917 [job-0] INFO  JobContainer - PerfTrace not enable!
2023-06-14 13:09:42.917 [job-0] INFO  StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.018s |  All Task WaitReaderTime 0.026s | Percentage 100.00%
2023-06-14 13:09:42.918 [job-0] INFO  JobContainer -
任务启动时刻                    : 2023-06-14 13:09:32
任务结束时刻                    : 2023-06-14 13:09:42
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

到此,安装完毕。

数据迁移:

MySQL_A 数据库 对 MySQL_B数据库 做数据迁移示例:

MySQL_A 和 MySQL_B 需要提前有相同的数据库表、字段、和字段类型。(如果是其它数据库之间的数据对接,请大家自行百度各数据库之间数据类型映射关系。)

题外话:这里简单的列举下MySQL和达梦数据库的数据类型映射关系,大家仅供参考

MySQL 数据类型达梦数据库数据类型
INTINT
VARCHARVARCHAR
TEXTCLOB
DATETIMETIMESTAMP
DECIMALDECIMAL
TINYINTSMALLINT

回归正题,MySQL_A 和 MySQL_B 都需要有如下 sys_role 表:

CREATE TABLE `sys_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id-主键 自增长',
  `name` varchar(255) NOT NULL COMMENT '角色名称',
  `create_user_id` int(11) NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_user_id` int(11) DEFAULT NULL COMMENT '修改人id',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

假设 MySQL_A 有如下数据,需要向B做数据迁移

 开始用Datax做数据迁移:

1:进入到datax安装目录的job文件夹下,我的是在D:\datax\job

2:文件夹内有一个job示例文件,我们参考示例文件新建一个job,此处示例为新建 sys_role.json,文件内容如下:

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",                     // 数据源读取插件名,使用MySQL作为数据源
          "parameter": {
            "username": "root",                       // MySQL用户名
            "password": "root",                       // MySQL密码
            "column": ["*"],                           // 需要读取的字段列表,这里表示读取所有字段
            "connection": [
              {
                "jdbcUrl": ["jdbc:mysql://localhost:3306/Mysql_A"],   // MySQL连接URL,指定要读取的数据库为Mysql_A
                "table": ["sys_role"]                   // 要读取的表名为sys_role
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",                      // 数据目标写入插件名,使用MySQL作为数据目标
          "parameter": {
            "username": "root",                        // MySQL用户名
            "password": "root",                        // MySQL密码
            "column": ["*"],                            // 需要写入的字段列表,这里表示写入所有字段
            "preSql": ["DELETE FROM sys_role"],         // 在写入数据前执行的SQL语句,此处表示先删除sys_role表中的数据
            "connection": [
              {
                "jdbcUrl": "jdbc:mysql://localhost:3306/Mysql_B",  // MySQL连接URL,指定要写入的数据库为Mysql_B
                "table": ["sys_role"],                   // 要写入的表名为sys_role
                "postSql": [],                            // 在写入数据后执行的SQL语句,此处为空
                "column": ["id", "name", "create_user_id", "create_time","update_user_id", "update_time", "remark"]  // 指定要写入的字段列表
              }
            ]
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 3                                  // 并发通道数,表示同时读取和写入的任务数
      },
      "errorLimit": {
        "record": 0,                                  // 允许的最大错误记录数,0表示不允许出现错误记录
        "percentage": 0.02                            // 允许的最大错误记录百分比,0.02表示最大允许2%的错误记录
      }
    }
  }
}

3:执行如下命令,进行数据迁移

python ..\bin\datax.py .\sys_role.json

4:成功执行后的结果示例:

PS D:\datax\bin> python .\datax.py ..\job\job.json

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.


2023-06-14 13:09:32.800 [main] INFO  MessageSource - JVM TimeZone: GMT+08:00, Locale: zh_CN
2023-06-14 13:09:32.803 [main] INFO  MessageSource - use Locale: zh_CN timeZone: sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
2023-06-14 13:09:32.813 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2023-06-14 13:09:32.818 [main] INFO  Engine - the machine info  =>

        osInfo: Oracle Corporation 1.8 25.361-b09
        jvmInfo:        Windows 10 amd64 10.0
        cpu num:        8

        totalPhysicalMemory:    -0.00G
        freePhysicalMemory:     -0.00G
        maxFileDescriptorCount: -1
        currentOpenFileDescriptorCount: -1

        GC Names        [PS MarkSweep, PS Scavenge]

        MEMORY_NAME                    | allocation_size                | init_size
        PS Eden Space                  | 256.00MB                       | 256.00MB
        Code Cache                     | 240.00MB                       | 2.44MB
        Compressed Class Space         | 1,024.00MB                     | 0.00MB
        PS Survivor Space              | 42.50MB                        | 42.50MB
        PS Old Gen                     | 683.00MB                       | 683.00MB
        Metaspace                      | -0.00MB                        | 0.00MB


2023-06-14 13:09:32.828 [main] INFO  Engine -
{
        "setting":{
                "speed":{
                        "channel":1
                },
                "errorLimit":{
                        "record":0,
                        "percentage":0.02
                }
        },
        "content":[
                {
                        "reader":{
                                "name":"streamreader",
                                "parameter":{
                                        "column":[
                                                {
                                                        "value":"DataX",
                                                        "type":"string"
                                                },
                                                {
                                                        "value":19890604,
                                                        "type":"long"
                                                },
                                                {
                                                        "value":"1989-06-04 00:00:00",
                                                        "type":"date"
                                                },
                                                {
                                                        "value":true,
                                                        "type":"bool"
                                                },
                                                {
                                                        "value":"test",
                                                        "type":"bytes"
                                                }
                                        ],
                                        "sliceRecordCount":100000
                                }
                        },
                        "writer":{
                                "name":"streamwriter",
                                "parameter":{
                                        "print":false,
                                        "encoding":"UTF-8"
                                }
                        }
                }
        ]
}

2023-06-14 13:09:32.846 [main] INFO  PerfTrace - PerfTrace traceId=job_-1, isEnable=false
2023-06-14 13:09:32.846 [main] INFO  JobContainer - DataX jobContainer starts job.
2023-06-14 13:09:32.847 [main] INFO  JobContainer - Set jobId = 0
2023-06-14 13:09:32.863 [job-0] INFO  JobContainer - jobContainer starts to do prepare ...
2023-06-14 13:09:32.864 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] do prepare work .
2023-06-14 13:09:32.864 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do prepare work .
2023-06-14 13:09:32.864 [job-0] INFO  JobContainer - jobContainer starts to do split ...
2023-06-14 13:09:32.865 [job-0] INFO  JobContainer - Job set Channel-Number to 1 channels.
2023-06-14 13:09:32.865 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] splits to [1] tasks.
2023-06-14 13:09:32.865 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] splits to [1] tasks.
2023-06-14 13:09:32.889 [job-0] INFO  JobContainer - jobContainer starts to do schedule ...
2023-06-14 13:09:32.892 [job-0] INFO  JobContainer - Scheduler starts [1] taskGroups.
2023-06-14 13:09:32.893 [job-0] INFO  JobContainer - Running by standalone Mode.
2023-06-14 13:09:32.900 [taskGroup-0] INFO  TaskGroupContainer - taskGroupId=[0] start [1] channels for [1] tasks.
2023-06-14 13:09:32.904 [taskGroup-0] INFO  Channel - Channel set byte_speed_limit to -1, No bps activated.
2023-06-14 13:09:32.904 [taskGroup-0] INFO  Channel - Channel set record_speed_limit to -1, No tps activated.
2023-06-14 13:09:32.913 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] attemptCount[1] is started
2023-06-14 13:09:33.240 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] is successed, used[328]ms
2023-06-14 13:09:33.241 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] completed it's tasks.
2023-06-14 13:09:42.913 [job-0] INFO  StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.018s |  All Task WaitReaderTime 0.026s | Percentage 100.00%
2023-06-14 13:09:42.914 [job-0] INFO  AbstractScheduler - Scheduler accomplished all tasks.
2023-06-14 13:09:42.914 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do post work.
2023-06-14 13:09:42.914 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] do post work.
2023-06-14 13:09:42.915 [job-0] INFO  JobContainer - DataX jobId [0] completed successfully.
2023-06-14 13:09:42.915 [job-0] INFO  HookInvoker - No hook invoked, because base dir not exists or is a file: D:\datax\hook
2023-06-14 13:09:42.917 [job-0] INFO  JobContainer -
         [total cpu info] =>
                averageCpu                     | maxDeltaCpu                    | minDeltaCpu
                -1.00%                         | -1.00%                         | -1.00%


         [total gc info] =>
                 NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime
                 PS MarkSweep         | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s
                 PS Scavenge          | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s

2023-06-14 13:09:42.917 [job-0] INFO  JobContainer - PerfTrace not enable!
2023-06-14 13:09:42.917 [job-0] INFO  StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.018s |  All Task WaitReaderTime 0.026s | Percentage 100.00%
2023-06-14 13:09:42.918 [job-0] INFO  JobContainer -
任务启动时刻                    : 2023-06-14 13:09:32
任务结束时刻                    : 2023-06-14 13:09:42
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

此时,MySQL_B服务,也有了相同的数据,迁移成功。

如果中间发生错误,会对整个事务进行回滚。所以,如果有多个表需要同步,建议拆成多个xxx.json 文件去配置同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java线程的同步机制(synchronized关键字)

线程的同步机制(synchronized ) 1.背景 例子:创建个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * 1.问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题2.问题出现的原因:当某个线程操作车票的过…

罗马不是一天建成的,那为什么建了那么多罗马?

这一个罗马,那一个罗马,东一个罗马,西一个罗马,世界历史的大半部分都在跟罗马打交道。更要命的是四大文明古国还没有古代罗马。 存在感这么强,还不是四大文明古国,名字还难记,公元前居然就有共…

P19[6-7]编码器接口(硬)

编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,(初始化后CNT=0;编码器右转,产生一个脉冲,CNT++,左转,产生一个脉冲,CNT--)。相当于外部时钟,同时控制CNT计数方向和计数时钟。每隔一段时间取CNT的值,再把CNT清零,就表示编码器的速度。 编码器测速即测频法…

总结linux查看当前用户的方法

操作环境:ubuntu 18.04系统 一、查看当前用户 1、shell终端中输入:who 当前用户为:root,使用pts的终端,后面是登陆的时间 2、shell终端中输入:whoami 当前用户为:root,很精简输出结果…

SpringBoot - spring-boot-maven-plugin插件介绍

简述 这个是SpringBoot的MAVEN插件,主要用来打包的,通常用来将项目打包成JAR或者WAR文件(生成FAT 包)。 这个插件生成的包是可执行的JAR。 Spring Boot Maven Plugin Documentation:https://docs.spring.io/spring-boo…

了解和使用 Kubernetes

文章目录 前言Kubernetes 集群安装Kubernetes 功能Kubernetes 核心概念Kubernetes 部署应用发布部署脚本发布服务使用 Ingress配置自动伸缩 Kubernetes 常用命令Kubernetes 故障排查 前言 通过 《容器集群管理工具 Docker Swarm》可以知道,在部署、调度、扩展和管理…

计算机时间到底是怎么来的?程序员必看的时间知识!

参考文章&#xff1a;https://xie.infoq.cn/article/22d762b26daee8b3f404f60a6 <title>计算机时间到底是怎么来的&#xff1f;程序员必看的时间知识&#xff01;_操作系统_Kaito_InfoQ写作社区</title><meta name"description" content"大家好&…

【阿里云OSS: Java端提供签名,vue+elementUI+axios 实现直传文件到OSS 实例】

文章目录 java代码&#xff08;包含后端上传文件、删除文件、提供签名&#xff09;前端代码postman 测试截图 java代码&#xff08;包含后端上传文件、删除文件、提供签名&#xff09; {private final static String OSS_BUCKET_NAME "test";private final static …

Day06 Python入门必知必会

文章目录 第一章 Python环境搭建1.1. 计算机基础1.1.1. 什么是编程1.1.2. 什么是进制1.1.2.1. 进制的简介1.1.2.2. 进制的分类1.1.2.3. 进制的表示1.1.2.4. 进制的转换1.1.2.5. 原反补(了解)数据的转换负数的表示补码的引入 1.2. Python的介绍1.3. Python的安装与使用1.3.1. Py…

PMP证书能直接升级项目管理专业人员能力评价(CSPM)三级吗?

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

【6.14 代随_57day】 回文子串、最长回文子序列

回文子串、最长回文子序列 回文子串1.方法图解步骤代码 最长回文子序列1.方法图解步骤代码 回文子串 力扣连接&#xff1a;647. 回文子串&#xff08;中等&#xff09; 1.方法 确定dp数组以及下标的含义 dp数组是要定义成一位二维dp数组。 布尔类型的dp[i][j]&#xff1a;表示…

Three.js教程:光源对物体表面影响

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 其他系列工具&#xff1a; NSDT简石数字孪生 光源对物体表面影响 实际生活中物体表面的明暗效果是会受到光照的影响&#xff0c;threejs中同样也要模拟光照Light对网格模型Mesh表面的影响。 你可以打开课件中案例源码&am…

5.2.12 IP分组的转发(三)

5.2.12 IP分组的转发&#xff08;三&#xff09; 示例&#xff1a;例&#xff1a;某网络拓扑如图所示&#xff0c;从图中我们可以看出该网络拓扑中有两个局域网&#xff0c;由两台路由器&#xff0c;其中路由器R1有两个以太网口&#xff0c;分别是E1和E2连接了两个局域网&…

这是我见过最通俗易懂的装饰者模式讲解!

关注“Java架构栈”微信公众号&#xff0c;回复暗号【Java面试题】即可获取大厂面试题 前言 本文主要讲述装饰者模式&#xff0c;文中使用通俗易懂的案例&#xff0c;使你更好的学习本章知识点并理解原理&#xff0c;做到有道无术。 什么是装饰者模式 装饰者模式是23种设计模式…

jmeter如何进行http压力测试

目录 前言&#xff1a; 1、添加线程组&#xff1a; 2、添加采样器&#xff1a; 3、添加监视器 压力测试知识说明 前言&#xff1a; JMeter是一个基于Java的开源压力测试工具&#xff0c;可用于评估Web应用程序的性能&#xff0c;包括HTTP、HTTPS、FTP、SOAP、Restful、JD…

试试前端自动化测试(基础篇)

众所周知的原因&#xff0c;前端作为一种特殊的 GUI 软件&#xff0c;做自动化测试困难重重。在快速迭代&#xff0c;UI 变动大的业务中&#xff0c;自动化测试想要落地更是男上加男 &#x1f436;。 近期的学习过程中&#xff0c;翻阅了众多前端自动化测试相关的文章&#xf…

JAVA中的拦截器、过滤器

JAVA变成拦截器、过滤器 一、拦截器1、简介说明2、源码及方法说明3、拦截器自定义应用 二、过滤器1、简介说明2、源码及方法说明3、过滤器的自定义应用 三、Springboot中的WebMvcConfigurer1、简介2、主要方法3、添加拦截器 四、区别1、原理2、触发3、其他 一、拦截器 1、简介…

Scala学习笔记

累了&#xff0c;基础配置不想写了&#xff0c;直接抄了→Scala的环境搭建 这里需要注意的是&#xff0c;创建新项目时&#xff0c;不要用默认的Class类&#xff0c;用Object&#xff0c;原因看→scala中的object为什么可以直接运行 一、Scala简介 1.1 图解Scala和Java的关系 1…

HQChart实战教程63-自定义手机端K线tooltip显示数据

HQChart实战教程63-自定义手机端K线tooltip显示数据 手机端K线tooltip步骤1. 配置手机端tooltip2. 替换k线tooltip格式化输出函数2. 格式化输出函数说明HQChart插件源码地址完整的demo源码手机端K线tooltip hqchart手机端内置一个tooltip,显示手势所在K线的信息。默认显示 日期…

了解D-Galactopyranose pentaacetate,CAS号25878-60-8的性质和应用

​ 中文名称&#xff1a;1,2,3,4,6-D-葡萄糖五乙酸酯 英文名称&#xff1a;D-Galactopyranose pentaacetate 规格标准&#xff1a;1g、5g、10g CAS&#xff1a;25878-60-8 分子式&#xff1a;C16H22O11 分子量&#xff1a;390.34 熔点&#xff1a;113C 沸点&#xff1a;451C 密…