【黑马甄选离线数仓day04_维度域开发】

news2024/11/14 6:38:09

1. 维度主题表数据导出

1.1 PostgreSQL介绍

PostgreSQL 是一个功能强大的开源对象关系数据库系统,它使用和扩展了 SQL 语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。

官方网址:PostgreSQL: The world's most advanced open source database 中文文档:http://www.postgres.cn/docs/14/index.html

PostgreSQL数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,至少实现了SQL:2011标准中要求的179项主要功能中的160项(注:目前没有哪个数据库管理系统能完全实现SQL:2011标准中的所有主要功能)。

1.2 PostgreSQL基本操作

  • 登录客户端

#psql -h 服务器 -p 端口地址 -d 数据库 -U 用户名     
psql -h 127.0.0.1 -p 5432 -d postgres -U postgres
#密码:itcast123
  • 基本增删改查:

select datname from pg_database; 或 \l   查看所有的库        

切换数据库: \c 数据库名称

查看所有表: \d

查看表结构: SELECT column_name FROM information_schema.columns WHERE table_name ='table_name';

其他操作跟MySQL大体类似。详情可参考拓展资料

1.3 PostgreSQL中创建结果表

所有的DWD层表都需要进行导出,这里以dwd_dim_goods_i表为例,进行演示。 其他建表语句详见 资料/代码/pg建表/postsql_dw_dim.sql

创建数据库:
CREATE DATABASE dw;

通过datagrip切换到public下: 在datagrip中,点击右上方的数据库选项

创建表操作:

建表的时候学会使用快捷键

alt+鼠标左键: 字符多选

alt+鼠标左键 然后 再ctrl+shift+右键→ : 选多个单词

home: 快速到行开头

end: 快速到行结尾

CREATE TABLE IF NOT EXISTS dwd_dim_goods_i(
    goods_id                INT           ,
    goods_no                VARCHAR(50)   ,
    goods_name              VARCHAR(200)  ,
    first_category_id       INT           ,
    first_category_no       VARCHAR(50)   ,
    first_category_name     VARCHAR(50)   ,
    second_category_id      INT           ,
    second_category_no      VARCHAR(50)   ,
    second_category_name    VARCHAR(50)   ,
    third_category_id       INT           ,
    third_category_no       VARCHAR(50)   ,
    third_category_name     VARCHAR(50)   ,
    brand_no                VARCHAR(50)   ,
    spec                    VARCHAR(50)   ,
    sale_unit               VARCHAR(50)   ,
    life_cycle_status       VARCHAR(50)   ,
    tax_rate_status         INT           ,
    tax_rate                VARCHAR(50)   ,
    tax_value               DECIMAL(27, 3),
    order_multiple          DECIMAL(27, 2),
    pack_qty                DECIMAL(27, 3),
    split_type              VARCHAR(50)   ,
    is_sell_by_piece        INT           ,
    is_self_support         INT           ,
    is_variable_price       INT           ,
    is_double_measurement   INT           ,
    is_must_sell            INT           ,
    is_seasonal             INT           ,
    seasonal_start_time     VARCHAR(50)   ,
    seasonal_end_time       VARCHAR(50)   ,
    is_deleted              INT           ,
    goods_type              VARCHAR(50)   ,
    create_time             TIMESTAMP     ,
    update_time             TIMESTAMP     ,
    PRIMARY KEY (goods_no)
);
COMMENT on table dwd_dim_goods_i is '商品表';
COMMENT on column dwd_dim_goods_i.goods_id                      is '商品ID';
COMMENT on column dwd_dim_goods_i.goods_no                      is '商品编码';
COMMENT on column dwd_dim_goods_i.goods_name                    is '名称';
COMMENT on column dwd_dim_goods_i.first_category_id             is '一级分类ID';
COMMENT on column dwd_dim_goods_i.first_category_no             is '一级分类编码';
COMMENT on column dwd_dim_goods_i.first_category_name           is '一级分类';
COMMENT on column dwd_dim_goods_i.second_category_id            is '二级分类ID';
COMMENT on column dwd_dim_goods_i.second_category_no            is '二级分类编码';
COMMENT on column dwd_dim_goods_i.second_category_name          is '二级分类';
COMMENT on column dwd_dim_goods_i.third_category_id             is '三级分类ID';
COMMENT on column dwd_dim_goods_i.third_category_no             is '三级分类编码';
COMMENT on column dwd_dim_goods_i.third_category_name           is '三级分类';
COMMENT on column dwd_dim_goods_i.brand_no                      is '品牌编号';
COMMENT on column dwd_dim_goods_i.spec                          is '商品规格';
COMMENT on column dwd_dim_goods_i.sale_unit                     is '销售单位';
COMMENT on column dwd_dim_goods_i.life_cycle_status             is '生命周期状态';
COMMENT on column dwd_dim_goods_i.tax_rate_status               is '税率审核状态 (0:未提交审核 1:待财务审核 2:税率已审核 3:未通过)';
COMMENT on column dwd_dim_goods_i.tax_rate                      is '税率code';
COMMENT on column dwd_dim_goods_i.tax_value                             is '税率';
COMMENT on column dwd_dim_goods_i.order_multiple                        is '订货倍数';
COMMENT on column dwd_dim_goods_i.pack_qty                              is '箱装数量';
COMMENT on column dwd_dim_goods_i.split_type                    is '分割属性';
COMMENT on column dwd_dim_goods_i.is_sell_by_piece              is '是否拆零,0:不拆;1:拆';
COMMENT on column dwd_dim_goods_i.is_self_support               is '是否自营 0:非自营;1:自营';
COMMENT on column dwd_dim_goods_i.is_variable_price             is '分店可变价 0:不可;1:可以';
COMMENT on column dwd_dim_goods_i.is_double_measurement         is '是否双计量商品 0:否;1:是';
COMMENT on column dwd_dim_goods_i.is_must_sell                  is '必卖品  0:非;1:是';
COMMENT on column dwd_dim_goods_i.is_seasonal                   is '季节性商品  0:非;1:是';
COMMENT on column dwd_dim_goods_i.seasonal_start_time           is '季节性开始时间';
COMMENT on column dwd_dim_goods_i.seasonal_end_time             is '季节性结束时间';
COMMENT on column dwd_dim_goods_i.is_deleted                    is '是否删除0:正常;1:删除';
COMMENT on column dwd_dim_goods_i.goods_type                    is '商品类型 1-国产食品 2-进口食品 3-国产非食品 4-进口非食品';
COMMENT on column dwd_dim_goods_i.create_time                      is '该记录创建时间';
COMMENT on column dwd_dim_goods_i.update_time                      is '该记录最后更新时间';

1.4 基于DataX完成数据导出

新建postgresql-dw数据源

构建任务

    hive中以-i结尾的维表是有分区的,每个分区保存一个快照,而postgresql中只保留最新的快照数据。所以构建reader读取hive表时不需要dt字段,导入到postgresql时,默认只导入最新的快照。
另外,为了防止postgresql中的历史数据有脏数据,在导入之前可以先清空数据。所以在构建postgresql writer时,需要加上前置sql:truncate table public.dwd_dim_goods_i。
​
操作如下:
    注意:在构建reader时,要指定导出的分区,指定的方式是在path中通过传参的方式,${partition}在运行时动态指定。
这个案例中path为:/user/hive/warehouse/dim.db/dwd_dim_goods_i/${partition}
​

依次点击构建、选择模板。

编辑任务:

注意:如果是以-f结尾的维表,因为没有分区,在指定path路径以及在最后指定参数时,都不需要考虑分区。

执行任务:

按照以上步骤配置完dwd层所有维表导出任务的配置。

2. 基于海豚调度完成维度主题上线

2.1 DS的基本介绍

DS是apache旗下的顶级开源项目, 是一款工作流的任务调度的系统, 可以对工作流的定时周期化的调度工作, DS早期来自于国内的易观大数据公司开发, 最终贡献给Apache

2.2 DS的架构

针对DS的架构流程, 要求: 整个过程能够讲的出来

    通过UI进行工作流的配置操作, 配置完成后, 将其提交执行, 此时执行请求会被API服务接收到, 接收到后, 随机选择一台Master来完成任务的处理(DAG, 任务分配, 资源处理)(底层最终是有对应scheduler具体完成)(Master是去中心化的),完成分配后, 将对应执行的任务交给对应worker(从节点)来执行, worker对应有一个logger服务进行日志的记录, 在执行过程中, 通过logger实时查看执行日志, 当执行完成后, 通知Master, Master进行状态变更,同时告警服务实时监控状态, 一旦发现状态出现异常, 会立即根据所匹配的告警方案, 通知给相关的人员

2.3 如何启动DS

cd /export/server/dolphinscheduler/
./bin/start-all.sh

如何访问DS:

访问地址:  http://192.168.88.80:12345/dolphinscheduler/ui/view/login/index.html
​
用户名: admin
密码: dolphinscheduler123

2.4 DS的安全中心

2.4.1 队列和租户

2.4.2 用户管理

2.4.3 告警组

2.4.4 worker分组

一般在安装DS的时候会直接配置好

2.4.5 权限管理

2.5 项目和调度操作[练习]

创建项目

创建工作流

  • 创建目录节点:

  • 创建文件节点:

  • 建立连接:

保存工作流:

上线运行工作流

  • 注意如下配置选项:

配置解释如下:

点击上线工作流

查看工作流状态:

2.6 数据源中心

作用: 用于配置在工作流中需要连接各个数据源信息

比如: 工作流中需要直接连接HIVE,那么我们就可以配置一个HIVE的数据源

连接HIVE的数据源:

2.7 进行部署上线操作

注意: 从业务库 –> ODS层操作, 是由DataX-Web进行周期调度执行处理, 每天凌晨20分开始运行, 此部分我们不需要在DS中配置

本次上线: 需要将从ODS –> DWD –> 数据导出 整个流程需要在DS中进行配置

注意: worker分组, 必须只能选择hadoop01(因为DataX Hive 都在Hadoop01节点上, Hadoop02没有的)

start的shell节点

  • 1- 创建一个 start的shell节点, 表示整个工作流的开始

无分区表

ODS层到DWD层

  • 2- 配置 ODS层 到 DWD层相关SQL语句 (以其中一个表详细记录)

insert overwrite table dim.dwd_dim_date_f
select
    trade_date,
    year_code,
    month_code,
    day_code,
    quanter_code,
    quanter_name,
    week_trade_date,
    month_trade_date,
    week_end_date,
    month_end_date,
    last_week_trade_date,
    last_month_trade_date,
    last_week_end_date,
    last_month_end_date,
    year_week_code,
    week_day_code,
    day_year_num,
    month_days,
    is_weekend,
    days_after1,
    days_after2,
    days_after3,
    days_after4,
    days_after5,
    days_after6,
    days_after7
from dim.ods_dim_date_f

-- 开启动态分区方案
-- 开启非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;
-- 开启动态分区支持(默认true)
set hive.exec.dynamic.partition=true;
-- 设置各个节点生成动态分区的最大数量: 默认为100个  (一般在生产环境中, 都需要调整更大)
set hive.exec.max.dynamic.partitions.pernode=10000;
-- 设置最大生成动态分区的数量: 默认为1000 (一般在生产环境中, 都需要调整更大)
set hive.exec.max.dynamic.partitions=100000;
-- hive一次性最大能够创建多少个文件: 默认为10w
set hive.exec.max.created.files=150000;
--hive压缩
--开启中间结果压缩
set hive.exec.compress.intermediate=true;
--开启最终结果压缩
set hive.exec.compress.output=true;
--写入时压缩生效
set hive.exec.orc.compression.strategy=COMPRESSION;

连线:

DWD层导出到PG

思路: 在DataX中配置每一个表从dwd到PG的Json文件, 然后通过shell命令执行调度即可

cd /export/server/datax/job/
mkdir -p dim_dwd2pg_job
cd dim_dwd2pg_job/
配置json文件:

vim hive2pg_dwd_dim_date_f.json
输入 i 进入插入模式:

对应的Json内容, 可以直接从datax-web中获取对应json内容 (注意: 需要将密码修改回来, 不要使用加密, 因为加密的是datax-web加的, 与datax没关系)

接下来直接在DS中配置使用即可

JOB_DIR="/export/server/datax/job/自己job目录名称/自己json文件名称.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_date_f"
if hdfs dfs -test -e "$hdfs_path";
then
   python /export/server/datax/bin/datax.py $JOB_DIR
else
   echo "路径不存在"
fi

上线运行

尝试上线运行, 查看是否可以导入以及是否可以导出数据

建议: 可以将pg中对应表数据清空表以及HIVE中表数据清空掉

保存上线, 运行

验证: 通过DS的状态以及通过hive表和pg表查看是否成功


有分区表

ODS层到DWD层:

DWD层导出到PG

cd /export/server/datax/job/dim_dwd2pg_job/

vim hive2pg_dwd_dim_source_type_map_i.json
输入i进入插入模式

添加json配置: 此配置直接从datax-web中获取, 注意更改用户和密码

partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/自己job目录名称/自己json文件名称.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_source_type_map_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi

点击保存, 设置全局参数: inputdate

上线运行

上线, 测试 查看是否可以正常导入:

完整工作流图

DS的定时操作:

设置, 定时的状态是下线状态, 需要将其调整为上线


附录:

hive参数配置

说明: 发现在执行数据导入到各个层次的时候, 需要在执行SQL之前, 添加很多的set的参数, 而且每个表的参数基本是一样的, 此时可以尝试将其配置到HIVE的公共部分

  • 选择Hive,点击配置,搜索hive-site,然后选择hive-site.xml 的 HiveServer2 高级配置代码段(安全阀),然后点击加号,将参数进行一个一个的配置

配置后, 点击保存更改,然后重启相关服务


pg所有脚本

以job目录为: dim_job为例

hive2pg_dwd_dim_date_f
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_date_f.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_date_f"
if hdfs dfs -test -e "$hdfs_path";
then
   python /export/server/datax/bin/datax.py $JOB_DIR
else
   echo "路径不存在"
fi
hive2pg_dwd_dim_category_statistics_i
partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_category_statistics_i.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_category_statistics_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi
hive2pg_dwd_dim_goods_i
partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_goods_i.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_goods_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi
hive2pg_dwd_dim_store_goods_i
partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_store_goods_i.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_store_goods_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi
hive2pg_dwd_dim_store_clear_goods_i
partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_store_clear_goods_i.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_store_clear_goods_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi
hive2pg_dwd_dim_source_type_map_i
partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_source_type_map_i.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_source_type_map_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi
hive2pg_dwd_dim_store_i
partition="dt=${inputdate}"
JOB_DIR="/export/server/datax/job/dim_job/dwd_dim_store_i.json"
hdfs_path="/user/hive/warehouse/dim.db/dwd_dim_store_i/${partition}"
if hdfs dfs -test -e "$hdfs_path";
then
    python /export/server/datax/bin/datax.py -p "-Dpartition=$partition" $JOB_DIR
else
    echo "路径不存在"
fi

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

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

相关文章

网络互联与IP地址

目录 网络互联概述网络的定义与分类网络的定义网络的分类 OSI模型和DoD模型网络拓扑结构总线型拓扑结构星型拓扑结构环型拓扑结构 传输介质同轴电缆双绞线光纤 介质访问控制方式CSMA/CD令牌 网络设备网卡集线器交换机路由器总结 IP地址A、B、C类IP地址特殊地址形式 子网与子网掩…

基于java实现捕鱼达人游戏

开发工具eclipse,jdk1.8 文档截图: package com.qd.fish;import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random;public class Fish {//定义鱼的图片BufferedImage fishImage;//定义鱼的数组帧BufferedImage[] fishFrame;//…

网工内推 | 美的、得力集团,包吃包住,IE认证优先,14薪

01 美的 招聘岗位:网络工程师 职责描述: 1.负责IT网络设备、IDC机房的日常维护巡检、监控和管理; 2.负责路由、交换、防火墙、无线控制器、AP等网络设备的开通、调整、优化升级; 3.负责公司OT、IT网络规划,项目实施以…

每日一题(LeetCode)----链表--链表最大孪生和

每日一题(LeetCode)----链表–链表最大孪生和 1.题目&#xff08;2130. 链表最大孪生和&#xff09; 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n…

Log4j2.xml不生效:WARN StatusLogger Multiple logging implementations found:

背景 将 -Dlog4j.debug 添加到IDEA的类的启动配置中 运行上图代码&#xff0c;这里log4j2.xml控制的日志级别是info&#xff0c;很明显是没生效。 DEBUG StatusLogger org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good! DEBUG StatusLogger Using Shutdow…

路由VRRP配置例子

拓朴如下&#xff1a; 主要配置如下&#xff1a; [R1] interface GigabitEthernet0/0/0ip address 10.1.1.1 255.255.255.0 vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface GigabitEthernet0/0/1ip address …

RHCE8 资料整理(八)

RHCE8 资料整理 第 8 篇 容器管理第 27 章 使用podman管理容器27.1 安装及配置podman27.2 镜像管理27.2.1 镜像的命名27.2.2 对镜像重新做标签27.2.3 删除镜像27.2.4 查看镜像的层结构27.2.5 导出和导入镜像 27.3 创建容器27.3.1 创建容器27.3.2 容器的生命周期27.3.3 创建临时…

积分球吸收光谱测量的领域有哪些?

积分球吸收光谱测量是一种常用的吸收光谱测量方法&#xff0c;它通过将样品放置在积分球的入口处&#xff0c;球内的光线经过多次反射后形成均匀的照度分布&#xff0c;然后使用光度计或光谱仪对光线进行测量&#xff0c;可以获得样品的相关参数。 在积分球吸收光谱测量中&…

2023.11.24 海豚调度,postgres库使用

目录 海豚调度架构dolphinscheduler DAG(Directed Acyclic Graph)&#xff0c; 个人自用启动服务 DS的架构(海豚调度) 海豚调度架构dolphinscheduler 注:需要先开启zookeeper服务,才能进行以下操作 通过UI进行工作流的配置操作, 配置完成后, 将其提交执行, 此时执行请求会被…

【C语言】qsort的秘密

一&#xff0c;本文目标 qsort函数可以对任意类型数据甚至是结构体内部的数据按照你想要的规则排序&#xff0c;它的功能很强大&#xff0c;可是为什么呢&#xff1f; 我将通过模拟实现qsort函数来让你对这整个过程有一个清晰的深刻的理解。 二&#xff0c;qsort函数原型 v…

JDBC编程方法及细节

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言用于连接和操作数据库的API&#xff08;Application Programming Interface&#xff09;。它为开发人员提供了一组Java类和接口&#xff0c;用于与各种关系型数据库进行通信。使用JDBC&#xff0c;开发人…

【Linux】fork()

文章目录 一、fork()是什么&#xff1f;二、fork()干了什么&#xff1f;三、fork()怎么用&#xff1f; 一、fork()是什么&#xff1f; fork()函数其实是在Linux系统中用于创建一个新的进程。让我们看看Linux中是怎么描述的&#xff1f;运行man fork。 RETURN VALUE On success…

探究Kafka原理-3.生产者消费者API原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

github国内访问小解(windows)

git 下载安装 使用 github 前必须确保电脑上已经安装了 Git&#xff0c;可以从 Git 官方网站去下载。 官方的网站在国内访问会比较慢&#xff0c;这里可以选择国内镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ github 之旅 确认电脑已…

使用向日葵开机棒进行远程开机

文章目录 1\. 前言2\. 说明3\. 开机棒设置4\. 电脑端设置4.1. 电脑端允许网卡唤醒4.1.1. 关闭设备节能4.2. 将电脑端设备加入设备列表 5\. 手机端5.1. 添加开机棒5.2. 绑定主机5.2.1. 添加成功的主机 6\. 唤醒 1. 前言 如果我们出差在外或者人不在实验室&#xff0c;如果可以使…

Spring 七大组件

文章目录 Spring 七大组件 Spring 七大组件 核心容器(Spring core) 核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean&#xff0c;它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式…

Linux python安装 虚拟环境 virtualenv,以及 git clone的 文件数据, 以及 下资源配置

根目录创建 venvs 文件夹 sudo mkdir /venvs 进入 /venvs 目录 cd /venvsp 创建虚拟环境&#xff0c;前提要按照 python3 安装 的 命令 sudo apt install python3 sudo python3 -m venv 虚拟环境名 激活虚拟环境 source /venvs/zen-venv/bin/activate 安装flask pip install fl…

测试工具JMeter的使用

目录 JMeter的安装配置 测试的性能指标 TPS 响应时长 并发连接 和 并发用户 CPU/内存/磁盘/网络 负载 性能测试实战流程 JMeter JMeter快速上手 GUI模式 运行 HTTP请求默认值 录制网站流量 模拟间隔时间 Cookie管理器 消息数据关联 变量 后置处理器 CSV 数据文…

Spring AOP:什么是AOP? 为什么要用AOP?如何学习AOP?

文章目录 &#x1f386;前言1.为什么要用 AOP3.如何学习去 AOP?3.1 AOP 的组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 3. Spring AOP 实现3.1 普通的方式实现 …

切换服务器上自己用户目录下的 conda 环境和一个外部的 Conda 环境

如果我们有自己的 Miniconda 安装和一个外部的 Conda 环境&#xff08;比如一个全局安装的 Anaconda&#xff09;&#xff0c;我们可以通过修改 shell 环境来切换使用它们。这通常涉及到更改 PATH 环境变量&#xff0c;以便指向你想要使用的 Conda 安装的可执行文件&#xff1a…