DolphinScheduler跨版本升级1.3.8至3.0.1

news2024/11/16 9:31:33

DolphinScheduler跨版本升级1.3.8至3.0.1

  • Refer
  • 背景
    • 基础环境
    • 依赖版本升级
      • 修改pom.xml
      • 问题解决
    • MYSQL升级
      • 1.文件替换
      • 2.修改表结构
        • t_ds_process_definition
        • t_ds_alert
        • t_ds_process_instance
      • 3.时间参数修改
      • 4.数据库升级
    • DOLPHIN安装
      • zookeeper集群
      • 创建用户
      • dolphinscheduler_env.sh
      • install_env.sh
      • 安装
      • 登录
    • 注意!!!
      • 示例

Refer

  • 遵循历史,依然要感谢各位在网上的输出!升级前还在考虑是否有可参考的文档呢,结果还真有大哥在做,给到了很多支持,感谢!

dolphinscheduler版本1.3跨版本升级到3.0
dolphinscheduler3.0.1官方文档(伪集群部署)

  • 注:官网给的备注是集群部署参照伪集群部署

背景

  • 上次安装Dolphin的时候工具只更新到了2.0.3版本,而且更新时间较新,出于稳定性考虑选择了1.3.8版本,该版本对于流程的优化和调度任务的类型都较少(但大致是够用的)。Dolphin的更新迭代一直都很快速,所以其实3.X的版本新增了很多任务支持,包括对于任务的数据质量监控都是集成工具中比较亮眼的功能。所以在原本的基础上预期将1.3.8版本升级到3.X版本。
  • 主要更新的是MySQL,由1.X到3.X的数据变化还是很大的
  • 其余相关升级操作可以参考官方文档,也可以参考该文档,相对的我这里会给出一些我的问题的解决办法哈

基础环境

  1. dolphinscheduler2.0.0(两个版本都需要,有一些信息互补)
  2. dolphinscheduler3.0.1(两个版本都需要,有一些信息互补)
  3. MySQL8.0.16
  4. mysql-connector-java8.0.16(手动下载连接器后添加到master,api、,tools,worker的libs下)
  5. JDK1.8
  6. ZooKeeper3.4.7 (3.4.6+)
  7. 进程树分析:macOS安装pstree;Fedora/Red/Hat/CentOS/Ubuntu/Debian安装psmisc
  8. DolphinScheduler 本身不依赖 Hadoop、Hive、Spark,但如果你运行的任务需要依赖他们,就需要有对应的环境支持
192.168.0.1192.168.0.2192.168.0.3
master服务
worker服务
alertServer报警服务
后端api服务

依赖版本升级

  • 总体来说Dolphin这边的git项目拉下来在本地一般都不修改太多,依照自己的需求进行修改即可

修改pom.xml

// 3.0.1内含的POM文件中的基础组件版本,如果有版本区别,建议修改版本后重新打包部署
// 例如hadoop和hive的版本
// 注意:由于mysql-connector的版本在打包中要求的是8.0.16,建议下载8.0.16的驱动
    <properties>
		……
        <zookeeper.version>3.4.14</zookeeper.version>
        <spring.version>5.3.12</spring.version>
        <spring.boot.version>2.5.6</spring.boot.version>
        <java.version>1.8</java.version>
        ……
        <hadoop.version>2.7.3</hadoop.version>
        ……
        <mysql.connector.version>8.0.16</mysql.connector.version>
        ……
        <hive.jdbc.version>2.1.0</hive.jdbc.version>
        ……
    </properties>

版本变更后可以直接maven打包

mvn  -U clean package -Prelease -Dmaven.test.skip=true 

问题解决

  • 我个人的话在打包过程中出现了Strings.isNotEmpty报错没有对应的包,这种都比较好解决
  • 报错位置:src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ResourceDao.java
  • 报错解决:在dolphinscheduler-tools这个module的pom.xml中添加对应的依赖即可
        <dependency>
           <groupId>org.apache.directory.api</groupId>
           <artifactId>api-all</artifactId>
           <version>1.0.0-M20</version>
       </dependency>

MYSQL升级

1.文件替换

  • 通过3.0.1版本的升级文件夹可以看出每个版本的dolphin都对数据库进行了一些schema的修改,由上面引用的CSDN描述可以发现,2.0版本的和3.0版本中的对应2.0版本位置的配置文件是有区别的,所以进行替换,主要是一些字段的类型变化和增删
  • 位置:/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade
    在这里插入图片描述
  • 示例
    在这里插入图片描述
  • 命令
## 防止直接粘贴报错,我用了中文哈,记得修改对应位置为本地自己环境的路径
## 文件夹名称有区别也记得修改
cp 你自己的路径/apache-dolphinscheduler-2.0.0-bin/sql/upgrade/2.0.0_schema/mysql/do*  你自己的路径/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade/2.0.0_schema/mysql/

cp 你自己的路径/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade/2.0.0_schema/mysql/dolphinscheduler_dml.sql 你自己的路径/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade/2.0.1_schema/mysql/

2.修改表结构

  • 在下述的三个表中添加下述内容

t_ds_process_definition

# vim 你自己的路径/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade/2.0.0_schema/mysql/dolphinscheduler_ddl.sql
# 找到t_ds_process_definition添加下面sql    
alter table t_ds_process_definition_log add `execution_type` tinyint(4) DEFAULT '0' COMMENT 'execution_type 0:parallel,1:serial wait,2:serial discard,3:serial priority';
alter table t_ds_process_definition add `execution_type` tinyint(4) DEFAULT '0' COMMENT 'execution_type 0:parallel,1:serial wait,2:serial discard,3:serial priority';

t_ds_alert

# vim 你自己的路径/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade/3.0.0_schema/mysql/dolphinscheduler_ddl.sql
# 注释原有t_ds_alert添加字段操作(原始数据结构中存在该字段)
--ALTER TABLE `t_ds_alert` ADD COLUMN `alert_type` int DEFAULT NULL COMMENT 'alert_type';
ALTER TABLE `t_ds_alert` change `alert_type` `alert_type` int DEFAULT NULL COMMENT 'alert_type';

t_ds_process_instance

#vim 你自己的路径/apache-dolphinscheduler-3.0.1-bin/tools/sql/sql/upgrade/2.0.0_schema/mysql/dolphinscheduler_ddl.sql
alter table t_ds_process_instance add next_process_instance_id int(11) DEFAULT '0' COMMENT 'serial queue next processInstanceId';

3.时间参数修改

  • 这个我目前没有特意尝试
## 你自己的路径/apache-dolphinscheduler-3.0.1-bin/bin/env/dolphinscheduler_env.sh
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-GMT+8}
export SPRING_DATASOURCE_URL="jdbc:mysql://x.x.x.x:3306/dolphinscheduler3?&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"

4.数据库升级

修改 ./bin/env/dolphinscheduler_env.sh 中的如下配置({user}{password}改成你数据库的用户名和密码),然后运行升级脚本
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}

执行数据库升级脚本:sh ./tools/bin/upgrade-schema.sh

DOLPHIN安装

  • 只需要在主节点配置,无需进行分发,在后续安装过程中会将对应信息scp到对应位置

zookeeper集群

  • zk集群的安装和启动,我就不赘述了,启动!
./bin/zkServer.sh start

创建用户

可以如官方文档所言,创建dolphinscheduler新用户,并配置免密,也可以使用本地环境中的符合条件的用户,我这里为了方便,直接使用了大数据集群的用户

# 创建用户需使用 root 登录
useradd dolphinscheduler
 # 添加密码
echo "dolphinscheduler" | passwd --stdin dolphinscheduler

# 登陆相关用户       
su  dolphinscheduler
# 生成密钥          
ssh-keygen -t rsa
# 远程cp到目标机器  
ssh-copy-id -i 192.168.0.1
ssh-copy-id -i 192.168.0.2
ssh-copy-id -i 192.168.0.3
  
 
# 修改目录权限,使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin

dolphinscheduler_env.sh

  • 配置基本数据环境,如MySQL,ZooKeeper和各类使用的大数据环境的环境变量的base地址
  • 一些任务类型外部依赖路径或库文件,如 JAVA_HOME 和 SPARK_HOME都是在这里定义的
  • 注册中心zookeeper
  • 服务端相关配置,比如缓存,时区设置等
# JAVA_HOME, will use it to start DolphinScheduler server
export JAVA_HOME=${JAVA_HOME:-/usr/local/jdk/}

# Database related configuration, set database type, username and password
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL='jdbc:mysql://XXXXXXXXXXX:3306/dpscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true'
export SPRING_DATASOURCE_USERNAME=XXXXXXX
export SPRING_DATASOURCE_PASSWORD=XXXXXXXXXXXXX

# DolphinScheduler server related configuration
export SPRING_CACHE_TYPE=${SPRING_CACHE_TYPE:-none}
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}

# Registry center configuration, determines the type and link of the registry center
export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-192.168.0.1:2181,-192.168.0.2:2181,-192.168.0.3:2181}

# Tasks related configurations, need to change the configuration if you use the related tasks.
#export HADOOP_HOME=${HADOOP_HOME:-/opt/soft/hadoop}
#export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/opt/soft/hadoop/etc/hadoop}
#export SPARK_HOME1=${SPARK_HOME1:-/opt/soft/spark1}
#export SPARK_HOME2=${SPARK_HOME2:-/opt/soft/spark2}
#export PYTHON_HOME=${PYTHON_HOME:-/opt/soft/python}
#export HIVE_HOME=${HIVE_HOME:-/opt/soft/hive}
#export FLINK_HOME=${FLINK_HOME:-/opt/soft/flink}
#export DATAX_HOME=${DATAX_HOME:-/opt/soft/datax}

export HADOOP_HOME=${HADOOP_HOME:-/usr/hadoop/bin/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/usr/hadoop/etc/hadoop}
#export SPARK_HOME1=${SPARK_HOME1:-/opt/soft/spark1}
export SPARK_HOME2=${SPARK_HOME2:-/usr/spark}
export PYTHON_HOME=${PYTHON_HOME:-/opt/anaconda3/bin/python}
export HIVE_HOME=${HIVE_HOME:-/usr/hive}
export FLINK_HOME=${FLINK_HOME:-/usr/flink}
#export DATAX_HOME=${DATAX_HOME:-/opt/soft/datax}


#export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH


export PATH=$HADOOP_HOME/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$PATH

install_env.sh

  • 主要配置DolphinScheduler每台机器对应安装哪些服务
  • 注:deployUser记得修改为你本地配置的可SSH免密的用户名称
# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# A comma separated list of machine hostname or IP would be installed DolphinScheduler,
# including master, worker, api, alert. If you want to deploy in pseudo-distributed
# mode, just write a pseudo-distributed hostname
# Example for hostnames: ips="ds1,ds2,ds3,ds4,ds5", Example for IPs: ips="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4,192.168.8.5"
ips=${ips:-"192.168.0.1,192.168.0.2,192.168.0.3"}

# Port of SSH protocol, default value is 22. For now we only support same port in all `ips` machine
# modify it if you use different ssh port
sshPort=${sshPort:-"22"}

# A comma separated list of machine hostname or IP would be installed Master server, it
# must be a subset of configuration `ips`.
# Example for hostnames: masters="ds1,ds2", Example for IPs: masters="192.168.8.1,192.168.8.2"
masters=${masters:-"192.168.0.1,192.168.0.2"}

# A comma separated list of machine <hostname>:<workerGroup> or <IP>:<workerGroup>.All hostname or IP must be a
# subset of configuration `ips`, And workerGroup have default value as `default`, but we recommend you declare behind the hosts
# Example for hostnames: workers="ds1:default,ds2:default,ds3:default", Example for IPs: workers="192.168.8.1:default,192.168.8.2:default,192.168.8.3:default"
workers=${workers:-"192.168.0.1:default,192.168.0.3:default"}

# A comma separated list of machine hostname or IP would be installed Alert server, it
# must be a subset of configuration `ips`.
# Example for hostname: alertServer="ds3", Example for IP: alertServer="192.168.8.3"
alertServer=${alertServer:-"192.168.0.2"}

# A comma separated list of machine hostname or IP would be installed API server, it
# must be a subset of configuration `ips`.
# Example for hostname: apiServers="ds1", Example for IP: apiServers="192.168.8.1"
apiServers=${apiServers:-"192.168.0.2"}

# The directory to install DolphinScheduler for all machine we config above. It will automatically be created by `install.sh` script if not exists.
# Do not set this configuration same as the current path (pwd). Do not add quotes to it if you using related path.
installPath=${installPath:-"/opt/dolphinscheduler"}

# The user to deploy DolphinScheduler for all machine we config above. For now user must create by yourself before running `install.sh`
# script. The user needs to have sudo privileges and permissions to operate hdfs. If hdfs is enabled than the root directory needs
# to be created by this user
deployUser=${deployUser:-"hadoop"}

# The root of zookeeper, for now DolphinScheduler default registry server is zookeeper.
zkRoot=${zkRoot:-"/dolphinscheduler"}

安装

  • 配置完成后就可以正式安装了,部署后的运行日志将存放在对应服务的logs文件夹内
  • 看到这里的应该也有一个疑问,为啥没有集群分发的步骤,实际上在install中就会做scp操作,配置目录在install_env.shinstallPath中,会在子节点中创建同名文件夹
  • 路径:./bin/install.sh

登录

  • 由于是迁移,用户信息也会带过去,下边是安装的默认用户名密码哈,迁移的直接使用对应账号密码即可!
浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 
默认用户名:admin
默认密码:dolphinscheduler123

注意!!!

  • 安装完可以快乐启动,但是要注意,由于是迁移,所以任务状态和定时任务都是上线状态,并且原有的节点信息会复刻,那!!!一定要先把所有任务停止一下,避免由于在同环境集群升级导致的节点信息报错,这是次要的,避免数据错误啊!

示例

  • 由于节点信息错误导致的任务报错,要修改dolphin里配置的Work分组管理
    在这里插入图片描述

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

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

相关文章

指针变量作为函数参数详解,形参和实参之间的值传递如何传递?如何改变指针变量所指向的变量?

函数的参数不仅可以是整型&#xff0c;浮点型&#xff0c;字符型等数据&#xff0c;还可以是指针类型&#xff1b;它的作用是将一个变量的地址传送到另一个函数中。 关于地址&#xff0c;指针&#xff0c;指针变量可以参考我的上一篇文章&#xff1a; 地址&#xff0c;指针&…

线程的基本方法

线程等待&#xff1a;wait方法 调用wait方法的线程会进入WAITING状态&#xff0c;只有等到其他线程的通知或程序被中断才会返回。调用wait方法后会释放对象的锁&#xff0c;因此 wait方法一般被用于同步方法或同步代码块中 。 线程睡眠&#xff1a;sleep方法 调用sleep方法会导…

Spring Boot 版本升级2.2.11.RELEASE至2.7.4

2.2.11.RELEASE > 2.7.4项目更新spring-boot-starter-parent 主依赖&#xff0c;导致项目跑不起了日志也没有输出有用信息&#xff0c;自己查看源码调试启动入口打断点&#xff0c;一步步进入方法定位项目停止代码我的项目执行到SpringApplication.class 的152行代码会停止项…

华为HCIE学习之Openstack Glance组件(glance对接swift)

文章目录一、Glance的结构二、服务部署流程三、将glance存储在swift中1、默认使用swift来存储2、指定可以存在swift中3、swift版本4、keystone的endpoint地址&#xff08;当glance去找swift时通过keystone去找&#xff09;5、租户名:用户名&#xff0c;用户必须拥有admin角色6、…

【C语言】自定义类型:结构体、枚举、联合

目录 1.结构体 1.1结构体类型 1.2结构体的自引用 1.3结构体的初始化 1.4结构体内存对齐 //对齐 //offsetof //修改默认对齐数 1.5结构体传参 2.位段 2.1位段的内存开辟 2.2位段的内存分配 3.枚举 4.联合&#xff08;共用体&#xff09; //判断大小端 1.结构体…

【GO】k8s 管理系统项目23[前端部分–工作负载-Pod]

k8s 管理系统项目[前端部分–工作负载-Deployment] 1. 代码部分 1.1 准备工作 由于Pod页面和Deployment内容差不多.那么就直接把Deployment的内容复制过来.再做修改. 替换Deployment为Pod替换Deploy为Pod替换deployment为pod替换deploy为pod禁用新增的按钮,删除新增方法,表…

django后端服务、logstash和flink接入VictoriaMetrics指标监控

0.简介 通过指标监控可以设置对应的告警&#xff0c;快速发现问题&#xff0c;并通过相应的指标定位问题。 背景&#xff1a;使用的 VictoriaMetrics(简称 VM) 作为监控的解决方案&#xff0c;需要将 django 服务、logstash 和 flink 引擎接入进来&#xff0c;VM 可以实时的获…

SpringBoot:SpringBoot配置文件.properties、.yml 和 .ymal(2)

SpringBoot配置文件1. 配置文件格式1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 三种配置文件优先级和区别2. yaml格式2.1 语法规则2.2 yaml书写2.2.1 字面量&#xff1a;单个的、不可拆分的值2.2.2 数组&#xff1a;一组按…

操作系统权限提升(十八)之Linux提权-内核提权

Linux 内核提权 Linux 内核提权原理 内核提权是利用Linux内核的漏洞进行提权的&#xff0c;内核漏洞进行提权一般包括三个环节&#xff1a; 1、对目标系统进行信息收集&#xff0c;获取到系统内核信息及版本信息&#xff1b; 2、根据内核版本获取其对应的漏洞以及EXP 3、使…

第七届蓝桥杯省赛 C++ A/B组 - 四平方和

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;四平方和 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大家…

Docker简介与用法

文章目录1、Docker简介1.1、Docker能解决什么问题1.2、什么是虚拟机技术1.2.1、虚拟机的缺点1.3、什么是容器1.3.1、容器与虚拟机比较1.4、分析 Docker 容器架构1.4.1、Docker客户端和服务器1.4.2、Docker 镜像(Image)1.4.3、Docker 容器(Container)1.4.4、Docker 仓库(reposit…

Windows程序员学习Linux环境内存管理

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows程序员如何学习Linux环境内存管理。由于很多程序在Windows环境下开发好后&#xff0c;还要部署到Linux服务器上去&#xff0c;所以作为Windows程序员有必要学习Linux环境的内存…

【计算机三级网络技术】 第三篇 IP地址规划技术

IP地址规划技术 文章目录IP地址规划技术一、IP 地址规划以及划分地址新技术1.IP地址的标准分类&#xff08;第一阶段&#xff09;2.划分子网的三级地址结构(第二阶段)3.构成超网的无类域间路由技术(第三阶段)4.网络地址转换技术(第四阶段)二、IP 地址分类1.A类、B类与C类IP地址…

数据的表示和运算

文章目录数制与编码进制间的转换BCD码定点数与浮点数定点数是什么&#xff1f;浮点数是什么&#xff1f;定点数与浮点数的区别机器数和真值原码、反码、补码、移码基本定义整数的加减法刷题小结最后数制与编码 进制间的转换 二进制、八进制、十进制、十六进制之间的转换不用多…

前端杂学1

1.简单且必须掌握的 1.MVVM是什么 将MVC中的V变为了MVVM&#xff0c;实现了双向绑定。其中VM就是vue的作用&#xff0c;这样页面的动态化可以通过vue来操作&#xff0c;而不是页面直接与后端操作&#xff0c;实现了前后端的分离 2.为什么vue采用异步渲染 &#xff1f; 调…

Kubernetes之服务发现

本文使用wordpressmysql搭建个人博客来讲解服务发现相关知识。 环境准备 wordpress需要连接到mysql才能正常工作&#xff0c;所以需要为mysql的pod创建一个mysql的svc&#xff0c;只要不删除重建svc&#xff0c;其IP不会变。 此时wordpress的pod需要连接mysql的svc的时候&…

HyperGBM用4记组合拳提升AutoML模型泛化能力

本文作者&#xff1a;杨健&#xff0c;九章云极 DataCanvas 主任架构师 如何有效提高模型的泛化能力&#xff0c;始终是机器学习领域的重要课题。经过大量的实践证明比较有效的方式包括&#xff1a; 利用Early Stopping防止过拟合通过正则化降低模型的复杂度使用更多的训练数…

第四阶段01-酷鲨商城项目准备

1. 关于csmall-product项目 这是“酷鲨商城”大项目中的“商品管理”项目&#xff0c;是一个后台管理项目&#xff08;给管理员&#xff0c;或运营人员使用的项目&#xff0c;并不是普通用户使用的&#xff09;&#xff0c;并且&#xff0c;只会涉及与发布商品可能相关的功能开…

企业工程项目管理系统平台(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

React(二):jsx事件绑定、条件渲染、列表渲染、jsx的本质、购物车案例

React&#xff08;二&#xff09;一、jsx事件绑定1.this的绑定方式2.jsx中绑定this的三种方式3.事件对象和传参&#xff08;1&#xff09;事件对象怎么传&#xff08;2&#xff09;其他参数怎么传&#xff1f;二、条件渲染1.直接if-else2.三元表达式3.利用逻辑中断4.案例练习5.…