DataWorks快速入门

快速入门

入门概述

说明

  • 如果您是第一次使用DataWorks,请确认已经根据准备工作模块的操作,准备好账号和工作空间角色等内容后,登录DataWorks控制台,单击相应工作空间后的进入数据开发,即可进行数据开发操作。
  • 本模块的操作在标准模式的工作空间下进行。如果您使用的是简单模式的工作空间,操作步骤同标准模式。但在提交任务时,不会区分开发环境和生产环境。

通常,通过DataWorks的工作空间实现数据开发和运维包含以下操作:

1.建表并上传数据
2.创建业务流程
3.创建同步任务
4.设置周期和依赖
5.运行及排错
6.使用临时查询快速查询SQL(可选)

下图为数据开发和运维的基本流程。

请添加图片描述

建表并上传数据

以创建表bank_data和result_table为例,为您介绍如何通过DataWorks创建表并上传数据。

前提条件

您在工作空间配置页面添加MaxCompute计算引擎实例后,当前页面才会显示MaxCompute目录。详情请参见配置工作空间。

背景信息

表bank_data用于存储业务数据,表result_table用于存储数据分析后产生的结果。

创建表bank_data

1.进入数据开发页面。

  • 登录DataWorks控制台。
  • 在左侧导航栏,单击工作空间列表
  • 选择工作空间所在地域后,单击相应工作空间后的进入数据开发。

2.在数据开发页面,鼠标悬停至新建图标,单击MaxCompute> 表

请添加图片描述

您也可以打开相应的业务流程,右键单击MaxCompute,选择新建 > 表

3.在新建表对话框中,输入表名bank_data,单击提交

注意

  • 表名不能超过64个字符,且必须以字母开头,不能包含中文或特殊字符。
  • 如果绑定多个实例,则需要选择MaxCompute引擎实例。

4.在表的编辑页面,单击DDL模式

5.在DDL模式对话框中,输入如下建表语句,单击生成表结构

CREATE TABLE IF NOT EXISTS bank_data
(age             BIGINT COMMENT '年龄',job             STRING COMMENT '工作类型',marital         STRING COMMENT '婚否',education       STRING COMMENT '教育程度',default         STRING COMMENT '是否有信用卡',housing         STRING COMMENT '房贷',loan            STRING COMMENT '贷款',contact         STRING COMMENT '联系途径',month           STRING COMMENT '月份',day_of_week     STRING COMMENT '星期几',duration        STRING COMMENT '持续时间',campaign        BIGINT COMMENT '本次活动联系的次数',pdays           DOUBLE COMMENT '与上一次联系的时间间隔',previous        DOUBLE COMMENT '之前与客户联系的次数',poutcome        STRING COMMENT '之前市场活动的结果',emp_var_rate    DOUBLE COMMENT '就业变化速率',cons_price_idx  DOUBLE COMMENT '消费者物价指数',cons_conf_idx   DOUBLE COMMENT '消费者信心指数',euribor3m       DOUBLE COMMENT '欧元存款利率',nr_employed     DOUBLE COMMENT '职工人数',y               BIGINT COMMENT '是否有定期存款'
);

创建表的更多SQL语法请参见创建和查看表。

6.在确认操作对话框中,单击确认

7.生成表结构后,在基本属性模块输入表的中文名,并分别单击提交到开发环境提交到生产环境

说明 本示例以标准模式的工作空间为例。如果您使用的是简单模式的工作空间,仅单击提交到生产环境即可。

8.在左侧导航栏,单击表管理

9.在表管理页面,双击打开相应的表名,查看表信息。

创建表result_table

  1. 数据开发页面,鼠标悬停至新建图标,单击MaxCompute> 表。您也可以打开相应的业务流程,右键单击MaxCompute,选择新建 > 表
  2. 新建表对话框中,输入表名result_table,单击提交
  3. DDL模式对话框中,输入如下建表语句,单击生成表结构
CREATE TABLE IF NOT EXISTS result_table
(  education   STRING COMMENT '教育程度',num         BIGINT COMMENT '人数'
);
  1. 确认操作对话框中,单击确认
  2. 生成表结构后,在基本属性区域输入表的中文名,并分别单击提交到开发环境提交到生产环境
  3. 在左侧导航栏,单击表管理
  4. 表管理页面,双击打开相应的表名,查看表信息。

本地数据上传至bank_data

DataWorks支持以下操作:

  • 上传本地的文本文件至工作空间的表中。
  • 通过数据集成模块,从多个不同的数据源导入业务数据至工作空间。

说明 本地文本文件上传的限制如下:

  • 文件类型:仅支持**.txt**、.csv和**.log**类型的文件。
  • 文件大小:不能超过30 MB。
  • 操作对象:支持分区表导入和非分区表导入,但不支持分区值为中文。

以导入本地文件banking.txt至DataWorks为例,操作如下:

  1. 数据开发页面,单击导入图标。

请添加图片描述

  1. 数据导入向导对话框中,至少输入3个字母来搜索需要导入数据的表,单击下一步
  2. 选择数据导入方式上传本地数据,单击选择文件后的浏览…。选择本地数据文件,配置导入信息。

请添加图片描述

请添加图片描述

  1. 单击下一步
  2. 选择目标表字段与源字段的匹配方式,本示例选择按位置匹配
  3. 单击导入数据

创建业务流程

前提条件

开始本操作前,请确保您已经在工作空间中准备好业务数据表bank_data和其中的数据,以及结果表result_table。详情请参见建表并上传数据。

创建业务流程

  1. 登录DataWorks控制台。

  2. 在左侧导航栏,单击工作空间列表

  3. 选择工作空间所在地域后,单击相应工作空间后的进入数据开发

  4. 数据开发页面,鼠标悬停至新建图标,单击业务流程

  5. 新建业务流程对话框中,输入业务名称描述

    注意 业务名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。

  6. 单击新建

创建节点并配置依赖关系

在业务流程中创建一个虚拟节点(start)和ODPS SQL节点(insert_data),并配置依赖关系为insert_data依赖于start。

注意

  • 虚拟节点属于控制类型节点,在业务流程运行过程中,不会对数据产生任何影响,仅用于实现对下游节点的运维控制。
  • 虚拟节点在被其它节点依赖的情况下,如果被运维人员手动设置为运行失败,则下游未运行的节点将因此无法被触发运行。在运维过程中,可以防止上游的错误数据进一步扩展。
  • 业务流程中,虚拟节点的上游节点通常会被设置为工作空间根节点。工作空间根节点的格式为工作空间名称_root
  • DataWorks会为节点自动添加一个节点名的输出,结构为工作空间名称.节点名称。如果一个工作空间下有两个同名的节点,请修改其中一个节点的节点输出。

建议您在设计业务流程时,默认创建一个虚拟节点作为业务流程的根节点,来控制整个业务流程。设计业务流程的操作如下:

  1. 双击业务流程名称进入开发面板,鼠标单击虚拟节点并拖拽至右侧的开发面板。

    请添加图片描述

  2. 新建节点对话框中,输入节点名称start,单击提交

    注意 节点名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。

  3. 以同样的操作新建ODPS_SQL节点,命名为insert_data

  4. 通过拖拽连线,设置start节点为insert_data节点的上游节点。

请添加图片描述

配置虚拟节点的上游依赖

在业务流程中,虚拟节点通常作为整个业务流程的控制器,是业务流程中所有节点的上游节点。

通常使用工作空间根节点作为虚拟节点依赖的上游节点

  1. 双击虚拟节点名称,进入节点的编辑页面。

  2. 单击节点编辑页面右侧的调度配置

  3. 调度依赖区域,单击使用工作空间根节点,设置虚拟节点的上游节点为工作空间根节点。

    请添加图片描述

  4. 单击工具栏中的保存图标。

编辑和运行ODPS SQL节点

本节将在ODPS_SQL节点insert_data中,通过SQL代码,查询不同学历的单身人士贷款买房的数量并保存结果,以便后续节点继续分析或展现。

  1. 打开ODPS SQL节点的编辑页面,输入下述代码。

    具体语法说明请参见SQL概述

    INSERT OVERWRITE TABLE result_table  --插入数据至result_table中。
    SELECT education, COUNT(marital) AS num
    FROM bank_data
    WHERE housing = 'yes'AND marital = 'single'
    GROUP BY education
    
  2. 右键单击代码中的bank_data,选中删除输入

    建表并上传数据中创建的bank_data表为非周期性调度产出的表,当有节点select该表数据时,需要手动删除通过select生成的自动解析配置结果(即@exclude_input=bank_data),以保障调度节点定时更新的表数据,通过节点调度依赖保障下游取数无误。

    请添加图片描述

  3. 单击工具栏中的保存图标,防止代码丢失。

  4. 单击运行图标。

    运行结束后,即可在页面下方查看运行日志和结果。

提交业务流程

  1. 运行并调试ODPS_SQL节点insert_data后,返回业务流程页面。

  2. 单击提交图标。

  3. 提交对话框中,选择需要提交的节点,输入备注,并选中忽略输入输出不一致的告警

  4. 单击提交

    业务流程提交后,即可在业务流程下的节点列表查看节点提交状态。如果节点名称左侧存在圆圈图标,表示该节点已提交;如果不存在圆圈图标,表示该节点未提交。

创建同步任务

前提条件

您需要首先通过RDS创建MySQL实例,获取RDS实例ID,并在RDS控制台添加白名单。详情请参见创建RDS MySQL实例。

说明 如果是通过自定义资源组调度RDS的数据同步任务,必须把自定义资源组的机器IP也加入RDS的白名单中。

背景信息

在DataWorks中,通常通过数据集成功能,定期导入系统中产生的业务数据至工作区。SQL任务进行计算后,再定期导出计算结果至您指定的数据源中,以便进一步展示或运行使用。

请添加图片描述

目前数据集成功能支持从RDS、MySQL、SQL Server、PostgreSQL、MaxCompute、OCS、DRDS、OSS、Oracle、FTP、DM、HDFS和MongoDB等数据源中,导入数据至工作空间或从工作空间导出数据。详细的数据源类型列表请参见支持的数据源与读写插件。

新增数据源

说明 仅项目管理员角色可以新建数据源,其它角色的成员仅支持查看数据源。

  1. 进入数据源管理页面。

    1. 登录DataWorks控制台。
    2. 在左侧导航栏,单击工作空间列表
    3. 选择工作空间所在地域后,单击相应工作空间后的进入数据集成
    4. 在左侧导航栏,单击数据源,进入工作空间管理 > 数据源管理页面。
  2. 数据源管理页面,单击右上角的新增数据源

  3. 新增数据源对话框中,选择数据源类型为MySQL

  4. 新增MySQL数据源对话框,配置各项参数。

    此处以创建阿里云实例模式类型为例。

    请添加图片描述

请添加图片描述

  1. 数据集成页签下,单击相应资源组后的测试连通性

    数据同步时,一个任务只能使用一种资源组。您需要测试每种资源组的连通性,以保证同步任务使用的数据集成资源组能够与数据源连通,否则将无法正常执行数据同步任务。如果您需要同时测试多种资源组,请选中相应资源组后,单击批量测试连通性。详情请参见数据源测试连通性。

  2. 测试连通性通过后,单击完成

确认作为目标的MySQL数据库中有表

在MySQL数据库中创建表odps_result

CREATE TABLE `ODPS_RESULT` (
`education`  varchar(255) NULL ,
`num`  int(10) NULL 
);

建表完成后,您可以执行desc odps_result;语句,查看表详情。

新建并配置同步节点

本节将新建一个同步节点write_result并进行配置,目的是把表result_table中的数据写入至自己的MySQL数据库中。具体操作如下:

  1. 切换至数据开发面板,新建一个离线同步节点write_result

  2. 设置write_result节点的上游节点为insert_data节点。

    请添加图片描述

  3. 选择数据源(ODPS > odps_first)、**表(result_table)**为数据来源。

  4. 选择您新建的MySQL数据源中的表(odps_result)为数据去向。

    请添加图片描述

  5. 选择字段的映射关系,左侧的源头表字段和右侧的目标表字段为一一对应关系。

  6. 通道控制区域,配置作业速率上限和脏数据检查规则。

请添加图片描述

  1. 预览保存。

    完成上述配置后,上下滚动鼠标即可查看任务配置。确认无误后,单击工具栏中的保存图标。

提交数据同步任务

同步任务保存后,返回业务流程。单击工具栏中的提交图标,提交同步任务至调度系统中。调度系统会根据配置的属性,从第二天开始自动定时执行。

配置调度和依赖属性

前提条件

请确保您已创建任务write_result,详情请参见创建同步任务。

配置调度属性

  1. 进入数据开发页面。

    1. 登录DataWorks控制台。
    2. 在左侧导航栏,单击工作空间列表
    3. 选择工作空间所在地域后,单击相应工作空间后的进入数据开发
  2. 在相应的业务流程下,双击打开离线同步节点write_result的编辑页面。

  3. 单击编辑页面右侧的调度配置

    说明 手动业务流程中创建的节点需要手动触发,无法通过调度执行。

  4. 时间属性区域,配置节点的调度属性。

请添加图片描述

请添加图片描述

配置依赖属性

依赖属性中可以配置节点的上游依赖,表示即使当前节点的实例已经到定时时间,也必须等待上游节点的实例运行完毕,才会触发运行。

例如,当前节点的实例将在上游insert_data节点的实例运行完毕后,才会触发执行。

在调度系统中,每一个工作空间中默认会创建一个工作空间名称_root节点作为根节点。如果本节点没有上游节点,可以直接依赖根节点。

提交节点

  1. write_result节点的编辑页面,单击工具栏中的保存图标。

  2. 提交节点。

    注意 您需要设置节点的重跑属性依赖的上游节点,才可以提交节点。

    1. 单击工具栏中的提交图标。
    2. 提交新版本对话框中,输入备注
    3. 单击确认

    如果您使用的是标准模式的工作空间,提交成功后,请单击右上角的发布。具体操作请参见发布任务。

    节点只有提交至调度系统中,才会从第二天开始,自动根据调度属性配置的周期,在各时间点生成实例,并定时运行。

    说明 如果是23:30以后提交的节点,则调度系统从第3天开始,才会自动周期生成实例并定时运行。

运行及排错

在设置周期和依赖的操作中,您配置了每周二凌晨2点执行离线同步节点。提交节点后,需要到第2天才能看到调度系统自动执行的结果。DataWorks为您提供测试运行、补数据和周期运行三种触发方式,帮助您确认实例运行的定时时间、相互依赖关系、数据结果产出是否符合预期。

说明 手动触发和自动调度的调度系统与周期生成实例的规则一致:

  • 无论周期选择小时、分钟、日、月或周,节点在每一个日期都会生成对应的实例。
  • 仅在指定日期的对应实例,会定时运行并生成运行日志。
  • 非指定日期的对应实例不会实际运行,而是在满足运行条件时,将状态直接转换为成功,因此不会有运行日志生成。

测试运行

  1. 单击当前页面左上角的图标,选择全部产品 > 运维中心(工作流),进入运维中心页面。

  2. 在左侧导航栏,单击周期任务运维 > 周期任务

  3. 单击相应节点列表后的测试

  4. 冒烟测试对话框中,输入冒烟测试名称,并选择业务日期,单击确定

  5. 自动跳转至测试实例页面,单击相应的实例,即可在右侧查看实例DAG图。

    右键单击实例,您可以查看该实例的依赖关系和详细信息,并进行终止运行、重跑等具体操作。

    说明

    • 测试运行是手动触发节点,只要到定时的时间,立即运行,自动忽略实例的上游依赖关系。
    • 根据前文所述的实例生成规则,配置为每周二凌晨2点运行的节点write_result,测试运行时选择的业务日期是周一(业务日期=运行日期-1),实例会在2点真正运行。如果不是周一,则实例在2点转换为成功状态,且没有日志生成。

补数据运行

如果需要确认多个节点的定时情况和相互依赖关系,或者需要从某个根节点开始重新执行数据分析计算,您可以进行补数据操作。

  1. 运维中心页面,单击左侧导航栏中的周期任务运维 > 周期任务
  2. 单击相应节点列表后的补数据 > 当前节点
  3. 配置补数据对话框中的参数,单击确定

请添加图片描述

  1. 自动跳转至补数据实例页面,单击相应的实例,即可看到实例DAG图。

    右键单击实例,可以查看该实例的依赖关系和详细信息,并进行终止运行、重跑等具体操作。

    说明

    • 补数据任务的实例依赖前一天,例如补2017-09-15到2017-09-18时间段内的任务,如果15号的实例运行失败了,则16号的实例也不会运行。
    • 根据前文所述的实例生成规则,配置为每周二凌晨2点运行的节点write_result,补数据运行时选择的业务日期是周一(业务日期=运行日期-1),实例会在2点真正运行。如果不是周一,则实例在2点转换为成功状态,且没有日志生成。

周期自动运行

周期自动运行,由系统根据所有节点的调度配置自动触发,所以页面没有操作入口。您可以通过以下两种方式查看实例信息和运行日志:

  • 运维中心页面,单击左侧导航栏中的周期任务运维 > 周期实例,选择业务日期或运行日期等参数,搜索write_result节点对应的实例后,右键查看实例信息和运行日志。

  • 选择周期实例页面中相应的节点实例并单击,即可看到实例DAG图。

    右键单击实例,可以查看该实例的依赖关系和详细信息并进行终止运行、重跑等具体操作。

    说明

    • 如果上游节点未运行,下游节点也不会运行。
    • 如果节点的实例初始状态为未运行,当定时时间到达时,调度系统会检查该实例的全部上游实例是否运行成功。
    • 只有上游实例全部运行成功,且定时时间到达的实例,才会被触发运行。
    • 处于未运行状态的实例,请确认上游实例已经全部成功且已到定时时间。

使用临时查询快速查询SQL(可选)

如果您已经创建了DataWorks工作空间(MaxCompute项目),可以直接使用DataWorks临时查询功能,快速书写SQL语句操作MaxCompute。

临时查询的详情请参见临时查询。

进入临时查询

  1. 登录DataWorks控制台。
  2. 在左侧导航栏,单击工作空间列表
  3. 选择工作空间所在地域后,单击相应工作空间后的进入数据开发
  4. 在左侧导航栏,单击临时查询
  5. 临时查询面板,右键单击临时查询,选择新建节点 > ODPS SQL
  6. 新建节点对话框中,输入节点名称,并选择目标文件夹

说明 节点名称的长度不能超过128个字符。

  1. 单击提交

运行SQL

现在,您可以在新建的临时查询节点中运行MaxCompute支持的SQL语句,详情请参见SQL概述。

以运行一个DDL语句新建表为例,输入建表语句,单击运行即可。

create table if not exists sale_detail
(
shop_name     string,
customer_id   string,
total_price   double
)
partitioned by (sale_date string,region string);
-- 创建一张分区表sale_detail

您可以查看本次运行的费用预估,单击运行

请添加图片描述

您可以在下方的日志窗口,查看运行情况和最终结果。如果本次运行成功,结果为OK

您可以使用同样的方法执行查询语句。

请添加图片描述

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

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

相关文章

php.amazeui,AmazeUI 导航条的实现示例

拥有易用的导航条对于任何网站都很重要。本文主要介绍了AmazeUI 导航条的实现示例,分享给大家,具体如下:导航条Amaze UI导航切换 首页项目下拉 标题1. 去月球2. 去火星3. 还是回地球4. 下地狱5. 桥头一回首其他 注册随便看看登录....am-topba…

JNDI用法详解

JNDI全称(Java Naming and Directory Interface),是java命名和目录接口。它是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。 1、命名的概念与应用 JNDI中的命名(Nam…

BigDecimal保留两位小数

文章目录前言1.代码实现2.方法详解注释前言 在项目中经常会用到小数的一些计算,而float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&#xff…

DataIntegrityViolationException: Error attempting to get column ‘xx‘——DataIntegrityViolationExceptio

一、解决办法 项目中在更新数据库时出现异常,org.springframework.dao.DataIntegrityViolationException,当然如果控制台直接报这个异常问题的解决估计也不至于让我写篇博客。 先说这个异常代表的含义吧: 这个异常的意思就是在更新&#xff…

Java中new Date插入mysql数据库,数据库时间多一秒问题

这是由于new Date()时,实际上是调用的System.currentTimeMillis()方法,即获得以毫秒为级别的时间戳。 一般数据库表的字段类型datetime/timestamp长度都是设置为0。 MySQL数据库对于毫秒大于500的数据进行进位,所以就造成的MySQL中的时间多一…

学php还是golang,学swoole还是golang

Swoole是一个面向生产环境的 PHP 异步网络通信引擎,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。 (推荐学习:swoole视频教程)Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏…

java解析vue对象数组,Java数组

Java提供了一个数据结构,所述数组,其存储相同类型的元件的固定大小的连续集合。数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用。您可以声明一个数组变量,例如数字和数字[0],数字[1]和...&#xff…

Java中List的subList()方法及使用注意事项

List<Object> list new Arraylist<>();List<Object> subList list.subList(0, 5);其中subList(0, 5)取得的是下标为0到4的元素,不包含下标为5的元素. java.util.List中的subList方法返回列表中指定的 fromIndex&#xff08;包括 &#xff09;和 toIndex&a…

SpringBoot 实现SSE 服务器发送事件

SSE 全称Server Sent Event&#xff0c;直译一下就是服务器发送事件&#xff0c;一般的项目开发中&#xff0c;用到的机会不多&#xff0c;可能很多小伙伴不太清楚这个东西&#xff0c;到底是干啥的&#xff0c;有啥用 本文主要知识点如下&#xff1a; SSE 扫盲&#xff0c;应…

php多表递归查询,使用公用表表达式的递归查询

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。公用表表达式 (CTE) 具有一个重要的优点&#xff0c;那就是能够引用其自身&#xff0c;从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。当某个查询引用递…

Springboot之整合SSE实现消息推送

Springboot之整合SSE实现消息推送 前言 项目中涉及到部分请求&#xff0c;后端处理时间较长&#xff0c;使用常规Http请求&#xff0c;页面等待时间太长&#xff0c;对用户不友好&#xff0c;故考虑使用长链接进行消息推送&#xff0c;可选方案有WebSocket、SSE&#xff0c;We…

Vue中npm run dev 和 npm run serve区别

在运行vue文件时&#xff0c;需要进行npm操作&#xff0c;但我们发现&#xff0c;有时候用的是npm run serve&#xff0c;而有的时候用的是npm run dev&#xff0c;二者有什么区别 在我们运行一些 vue 项目的时候&#xff0c;输入npm run serve或者 npm run dev的其中一个时&a…

SpringBoot导出数据为PDF

一、SpringBoot导出数据为PDF 1、添加所需依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version> </dependency> <dependency><groupId>com.itextpdf.…

php安装mem+cache扩展,安装memcached及php扩展

用的是centos系统1、安装memcachedyum -y install memcached安装完成后&#xff0c;memcached -h应该会出现memcached 参数说明2、memcached配置文件vi /etc/sysconfig/memcachedPORT"11210"USER"memcached"MAXCONN"1024"CACHESIZE"64"…

Springboot集成支付宝沙箱支付(完整版)

开发前准备 easy支付官方文档&#xff1a;https://opendocs.alipay.com/open/009ys9 通用版文档&#xff1a;https://opendocs.alipay.com/open/02np94 支付宝沙箱的配置 注册支付宝开发者账户&#xff0c;进入开发者控制台 https://openhome.alipay.com/platform/developer…

Springboot集成支付宝沙箱支付(退款功能)

包括&#xff1a; 支付宝沙箱 支付 异步通知 退款功能 正式版本的sdk 通用版本SDK文档&#xff1a;https://opendocs.alipay.com/open/02np94 <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><…

Java递归生成树

1.建菜单表 CREATE TABLE t_menu (id int(11) NOT NULL AUTO_INCREMENT,pid int(11) NOT NULL,name varchar(255) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8mb4;2.造一些数据 注意&#xff1a;根节点的pid0&#xff0c;其他节点的p…

Springboot获取公网IP和当前所在城市(非常简单)

最近我们发现各大社交平台都出现了一个新的功能&#xff1a;IP属地。 比如某乎&#xff1a; 这个IP属地是怎么做到的呢&#xff1f;今天我来教教你&#xff0c;保证你看完直呼Easy~ 百度搜索 打开百度&#xff0c;搜索IP&#xff0c;你就能看到你当前的IP地址&#xff0c;类…

线程死锁——死锁产生的条件

什么是线程死锁 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源&#xff0c;导致这些线程处于相互等待状态&#xff0c;若无外力作用&#xff0c;它们将无法继续执行下去。 造成死锁的原因可以概括成三句话&#xff1a; 当前线程拥有其他线程需要的资源当前线程…

TortoiseGit的使用详解

Git是什么&#xff0c;相信大家都很清楚。Git不就是分布式版本控制系统嘛&#xff1f;那你知道TortoiseGit是什么吗&#xff1f;下面我们就介绍一下TortoiseGit它是什么&#xff1f;如何使用&#xff1f;   TortoiseGit其实是一款开源的git的版本控制系统&#xff0c;也叫海龟…