《Spring Cloud 微服务架构探秘》

一、Spring Cloud 微服务架构概述

Spring Cloud 是基于 Spring Boot 构建的微服务开发框架,它充分利用了 Spring Boot 的便利性,极大地简化了分布式系统基础设施的开发。

Spring Cloud 具有诸多显著特点。首先,它提供了丰富的组件,如服务发现组件 Eureka,服务提供者将服务注册到 Eureka 服务器,服务消费者从 Eureka 中获取服务信息,实现服务的动态发现和调用。据资料显示,Eureka 大多采用集群方式,保证了可用性和分区容错性。

其次,Spring Cloud 具备负载均衡功能。例如 Ribbon 和 Feign,Ribbon 是基于 Netflix Ribbon 实现的客户端负载工具,能提供客户端的软件负载均衡算法,让服务消费者从注册中心获知可用地址后选择合适的服务器。Feign 则是声明式 WebService 客户端,通过定义接口并添加注解,与 Ribbon 和 Eureka 组合使用实现负载均衡,优雅而简单地完成服务调用。

此外,Spring Cloud 还包括熔断器 Hystrix,它是处理分布式系统延迟和容错的开源库。在分布式系统中,当一个服务出现问题时,Hystrix 能通过故障检测实现服务降级、熔断、限流等功能,避免级联故障,保证系统的弹性。

Spring Cloud 的配置管理工具 Spring Cloud Config 可以对每个微服务提供者的配置文件进行统一管理,可放在 Git 等服务器上进行管理。

总之,Spring Cloud 以其丰富的组件和强大的功能,为开发者构建分布式系统提供了有力的支持。

二、Spring Cloud 的核心组件

(一)服务注册与发现

Eureka 在分布式环境下扮演着至关重要的角色。它作为服务注册中心,允许服务实例在启动时将自身的信息注册到 Eureka Server 上,这些信息包括服务实例的 IP 地址、端口号、应用名称、实例 ID 等。服务消费者可以从 Eureka Server 中查询到已注册的服务信息,从而实现服务的动态发现和调用。

在微服务架构中,Eureka 的重要作用不言而喻。它是各个微服务之间通信的枢纽,使得服务之间能够相互发现和通信。例如,在一个电商系统中,订单服务、库存服务、仓储服务等都可以通过 Eureka 来找到彼此。同时,Eureka 还提供了负载均衡机制,能够根据服务实例的状态和数量,动态地将请求分配给可用的服务实例,提高了服务的可用性和性能。此外,Eureka 还具有故障转移功能,当某个服务实例出现故障时,Eureka 能够自动将其从服务列表中移除,并将请求路由到其他可用的服务实例,保证了系统的可靠性和稳定性。

(二)负载均衡

Ribbon 作为基于客户端的负载均衡器,在分布式系统中发挥着重要作用。其工作流程如下:首先,客户端在进行服务调用之前,会向注册中心(如 Eureka)发起查询请求,获取同一服务的多个实例的地址和端口号等信息,从而得到可用的服务列表。然后,Ribbon 会根据选择的负载均衡策略,从可用的服务实例列表中选择一个实例。Ribbon 提供了多种负载均衡算法,包括轮询、随机、加权随机、最少连接数等。最后,将请求发送到选择的服务实例,并处理响应。

Ribbon 还支持服务实例的健康检查和动态服务实例的添加和删除等功能。如果某个服务实例无法正常工作,Ribbon 会将其从可用服务列表中剔除,并选择其他健康的服务实例。如果有新的服务实例加入,Ribbon 会自动将其加入可用服务列表中,以便后续的负载均衡。

(三)分布式跟踪

Sleuth 在微服务架构系统中起着关键作用。它可以跟踪分布式系统中的请求链路,帮助开发者定位问题。Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin。

术语 Spring Cloud Sleuth 借用了 Dapper 的术语。Span 是工作的基本单位,例如发送 RPC 是一个新的跨度,以及向 RPC 发送响应。Span 由跨度的唯一 64 位 ID 标识,跨度是其中一部分的跟踪的另一个 64 位 ID。跟踪是一组 spans 形成树状结构。注释用于及时记录事件的存在,用于定义请求的开始和停止的一些核心注释有 cs(客户端发送)、sr(服务器接收)、ss(服务器发送)、cr(客户端接收)。

通过可视化 Span 和 Trace,开发者可以更直观地了解系统的运行情况,快速定位问题所在。

(四)API 网关

Spring Cloud Gateway 作为功能强大的 API 网关解决方案,提供了灵活的路由和过滤机制。客户端向 springcloud Gateway 发出请求,然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器来将请求发送到我们实际的服务的业务逻辑,然后返回。

过滤器分为 Gateway Filter 和 Global Filter 两种类型。在 pre 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等;在 post 类型的过滤器中可以做响应内容、响应头的修改、日志的输出,流量监控等。

Spring Cloud Gateway 的核心逻辑是路由转发和执行过滤器链,它与注册中心高度集成,实现自动的路由和负载均衡,同时还能轻易地实现限流和权限验证等功能。

(五)声明式 HTTP 客户端

Feign 作为声明式的 HTTP 客户端,极大地简化了微服务之间的通信。如果对某个接口定义了 @FeignClient 注解,Feign 就会针对这个接口创建一个动态代理。当调用这个接口时,实际上是调用 Feign 创建的动态代理。

Feign 的动态代理会根据接口上的 @RequestMapping 等注解,动态构造出要请求的服务的地址,最后针对这个地址,发起请求、解析响应。Feign 与 Ribbon 和 Eureka 紧密协作,实现了负载均衡和服务发现,使得服务调用更加优雅和简单。

(六)熔断和隔离机制

Hystrix 通过熔断和隔离机制防止服务故障传播,提高系统稳定性和可用性。在微服务架构中,如果出现雪崩问题,Hystrix 会搞很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线程池。每个线程池里的线程就仅仅用于请求那个服务。

当某个服务出现故障时,Hystrix 能通过故障检测实现服务降级、熔断、限流等功能,避免级联故障,保证系统的弹性。

(七)网关服务器

Zuul 作为 API 网关服务器,在动态路由、监控、弹性、安全等方面具有重要功能。它类似于服务器端的 nginx,负责网络路由。在微服务架构中,前端请求统一从 Zuul 网关进入,由 Zuul 网关转发请求给对应的服务。

Zuul 可以做统一的降级、限流、认证授权、安全等,为微服务架构提供了强大的入口控制和管理功能。

(八)统一配置服务

Spring cloud Config 在微服务架构中集中管理配置,满足不同环境不同配置需求。它为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

可以将配置文件放在 Git 等服务器上进行管理,实现配置的动态刷新,避免每次配置更新都要重启服务。

三、Spring Cloud 微服务架构案例分析

(一)QuickStart 案例

QuickStart 是基于 SpringCloud 体系实现的简单购物流程案例。该案例满足基本功能,如注册、登录、商品列表展示、商品详情展示、订单创建、详情查看、订单支付、库存更新等。每个业务服务采用独立的 MYSQL 数据库,初期考虑用到众多组件,包括服务注册与发现的 Eureka、配置管理的 Spring config 和 Spring security、集群容错的 Hystrix(待实现)、API 网关 Zuul(待实现)、服务负载的 feign+ribbon、api 文档输出的 swagger2、代码简化的 lombok、消息队列 rabbitmq、分布式锁 redis(待实现)、链路跟踪 spring cloud sletuh - zipkin、安全认证 oauth2/JWT(待实现)、服务监控 spring-boot-admin。

使用该案例时,先启动 admin-server、eureka-server、conf-server 三个基础服务,再依次启动 payment/order/product/account 基础业务服务,最后启动 front-app 服务,打开浏览器,输入 http://localhost:8088/swagger-ui.html,根据流程 API 依次可使用功能。后续有时间还将提供页面,基于 VUE2+BOOTSTRAP,将流程串起来。

(二)全网首发实战派案例

《全网首发!Spring Cloud 微服务架构实战派 39 个实例 + 1 个综合项目》针对 Spring Cloud Greenwich.SR2 版本+Spring Boot 的 2.1.x.RELEASE 版本。本书采用“知识点+实例”形式编写,共有“39 个基于知识点的实例 + 1 个综合性项目”,深入讲解了 Spring Cloud 的各类组件、微服务架构的解决方案和开发实践,以及容器、Kubernetes 和 Jenkins 等 DevOps(开发运维一体化)相关知识。

这本书适合具备 Java 基础的开发人员、对微服务架构和 Spring Cloud 感兴趣的读者、了解 Spring 或 Spring Boot 的开发人员自学之用。需要获取这份 PDF 的小伙伴直接添加小助理 vx:kaixindian331 即可免费获取。

(三)十个实践案例

十个使用 Spring Cloud 和 Java 创建微服务的实践案例包括:

  1. 设计模块化的微服务:遵循单一职责原则,设计模块化、松耦合的微服务,使团队能独立处理不同功能。
  1. 利用 Spring Boot 和 Spring Cloud:Spring Boot 提供快速开发环境,集成 Spring Cloud 模块增强微服务功能,如服务发现、负载均衡、断路器和集中式配置管理。
  1. 将微服务容器化:使用 Docker 等技术简化部署,确保环境一致性,促进 DevOps 部署方式。
  1. 实施断路器模式:用 Spring Cloud Hystrix 防止级联故障,提供回退机制减少故障影响。
  1. 集中化配置管理:使用 Spring Cloud Config 将配置外部化,简化维护,允许动态更新无需重启服务,增强安全性。
  1. 确保服务发现:用 Spring Cloud Netflix Eureka 或 Spring Cloud Consul 实现服务发现,增强系统可扩展性和弹性。
  1. 应用 API 网关:如 Spring Cloud Gateway 或 Spring Cloud Netflix Zuul,管理传入 API 请求,集中处理身份验证、安全性和负载均衡等横切关注点。
  1. 日志聚合和监控:利用 ELK 堆栈或 Prometheus 和 Grafana 等工具聚合微服务日志和指标,了解健康状况和性能。
  1. 实施异步通信:使用 RabbitMQ 或 Apache Kafka 等消息代理实现微服务异步通信,增强容错性,支持事件驱动架构。
  1. 自动化测试和部署:实施自动化测试、持续集成和持续部署流程,确保变更不引入回归问题,简化部署过程。

(四)从架构演进谈实践案例

系统架构从单一应用架构逐渐演进到垂直应用架构,再到分布式服务架构、服务治理架构(SOA),最后到微服务架构。

在单一应用架构中,所有功能部署在一起,存在代码耦合、无法针对不同模块优化、无法水平扩展、单点容错率低等问题。

垂直拆分架构解决了并发问题,可针对不同模块优化,方便水平扩展和负载均衡,但有重复开发工作的缺点。

分布式服务架构将核心业务抽取为独立服务,提高代码复用和开发效率,但系统间耦合度变高。

服务治理架构通过增加调度中心管理集群容量,但服务间依赖关系复杂,运维、测试部署困难。

微服务架构具有单一职责、微服务粒度小、面向服务、自治、团队和技术独立、前后端分离、数据库分离、部署独立等特点,降低耦合,易维护。

(五)最流行实践与经验总结案例

Spring Boot 通过自动化配置为微服务提供快速开发环境,Spring Cloud 在 Spring Boot 基础上提供了众多微服务所需组件。Spring Cloud 与 Spring、Spring Boot 的关系紧密,共同构建强大的微服务架构。在中小公司中,Spring Cloud 可以帮助快速构建分布式系统,提高开发效率和系统的可维护性。但其引入也需要一定的学习成本和技术投入。

(六)Rainbond 部署案例

以 Pig 快速开发框架为例,在 Rainbond 上部署一套完整的 Spring Cloud 项目。首先说明部署环境,包括所需的软件和硬件要求。然后介绍模块构建步骤,如何将各个微服务模块进行构建和配置,使其能够在 Rainbond 平台上顺利运行。详细阐述服务注册与发现、负载均衡、配置管理等方面在 Rainbond 上的实现方式。

(七)Spring Cloud Alibaba 架构全解析案例

《微服务架构秘籍:SpringCloud Alibaba》是一本备受瞩目的新书,涵盖了 SpringCloud Alibaba 框架的使用和优化。书中内容包括微服务介绍、微服务环境搭建、Nacos Discovery - 服务治理、Sentinel - 服务容错、Gateway - 服务网关、Sleuth - 链路追踪、Rocketm - 消息驱动、SMS - 短信服务、Nacos Config - 服务配置、Seata - 分布式事务等章节。这本书可能成为初学者入门微服务的重要指南,也为资深开发者提供了深入理解和优化微服务架构的机会。

(八)现代微服务架构实战项目案例

springcloud-2020 项目具有先进的技术特点和优秀的架构设计。在技术方面,可能采用了最新的 Spring Cloud 和 Spring Boot 版本,以及其他相关的技术组件。架构设计上,可能采用模块化、松耦合的设计理念,实现服务的高内聚和低耦合。应用场景广泛,适用于各种规模的企业和项目。优势包括可扩展性强、高可用性、易于维护等。采用的核心组件可能包括服务注册与发现、负载均衡、断路器、API 网关等。在持续集成方面,可能采用了先进的工具和流程,确保项目的高效开发和稳定运行。

四、Spring Cloud 微服务架构的优势与意义

(一)优势分析

Spring Cloud 微服务架构具有多方面的优势。在可扩展性方面,它可以通过添加或删除服务来轻松扩展或缩小系统规模。例如,当业务增长时,可以快速地添加新的微服务来满足需求,而不会影响整个系统的稳定性。据统计,一些大型企业在采用 Spring Cloud 微服务架构后,能够在短时间内实现系统规模的数倍增长。

独立部署的特性使得每个微服务都可以独立进行部署,不依赖于其他服务,耦合性低。这大大提高了开发和部署的效率。服务的快速启动也是一个显著优势,拆分后的服务启动速度比拆分前快很多,因为依赖的库少了,代码量也少了。比如,一个原本启动需要几分钟的单体应用,拆分为微服务后,单个服务的启动时间可能仅需几十秒。

可维护性方面,每个微服务都可以由不同的团队负责维护,使得整个系统的维护变得更加简单和有效。不同团队可以专注于自己负责的服务,提高维护的专业性和效率。

灵活性方面,微服务可以使用不同的技术和语言进行开发,使得开发人员可以选择最适合他们的工具。这样可以充分利用各种技术的优势,提高开发效率和质量。

(二)核心设计理念

  1. 注册中心:服务发现和注册是微服务架构的核心,Spring Cloud 使用 Eureka、Consul 或 Zookeeper 等注册中心来实现服务的发现和注册。服务实例启动时会将自己的信息注册到注册中心,服务消费者从注册中心获取服务信息,实现服务的动态发现和调用。例如,Eureka 采用集群方式,保证了可用性和分区容错性。
  1. 负载均衡:在微服务架构中,服务可能会被部署在多个实例上,因此需要使用负载均衡算法来平衡流量。Spring Cloud 提供了 Ribbon 和 LoadBalancer 来实现客户端负载均衡。Ribbon 根据指定的规则(如轮询、随机等)选择一个服务实例进行调用,并且支持服务实例的健康检查和动态添加、删除等功能。
  1. 服务网关:服务网关是微服务架构中的重要组件,它可以将客户端的请求路由到不同的微服务实例上。Spring Cloud Gateway 和 Netflix Zuul 是常用的服务网关。它们提供了灵活的路由和过滤机制,可以实现参数校验、权限校验、流量监控、日志输出、协议转换等功能。
  1. 熔断器:在微服务架构中,由于服务之间的调用可能会产生故障,因此需要使用熔断器来保护系统免受故障的影响。Spring Cloud Hystrix 和 Resilience4J 提供了熔断器的实现。当某个服务出现故障时,熔断器会中断对该服务的调用,返回一个预设的默认值或者执行一个备用逻辑,避免级联故障。
  1. 配置中心:微服务架构中的配置管理也是非常重要的,Spring Cloud 提供了 Config Server 和 Config Client 来管理分布式系统的配置。配置文件可以放在 Git 等服务器上进行管理,实现配置的动态刷新,避免每次配置更新都要重启服务。

(三)意义探讨

Spring Cloud 微服务架构作为一种趋势,提供了标准化、全站式的技术方案,对服务端软件系统技术水平的进步具有重要意义。它为开发者提供了一套简单易懂、易部署和易维护的分布式系统开发工具包,使得开发者可以快速构建出可靠、高效的微服务系统。

Spring Cloud 从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。这些功能都是以插拔的形式提供出来,方便系统架构演进的过程中,可以合理的选择需要的组件进行集成,从而在架构演进的过程中会更加平滑、顺利。

微服务架构的出现,使得软件系统的开发更加灵活、高效,能够更好地应对互联网高并发、大流量的性能要求。Spring Cloud 微服务架构的标准化和全站式技术方案,有效推进了服务端软件系统技术水平的进步,为软件系统的发展带来了新的机遇和挑战。

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

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

相关文章

【AIGC】破解ChatGPT!如何使用高价值提示词Prompt提升响应质量

文章目录 为什么高价值提示词如此重要?🔍1.1 提升响应的相关性和准确性1.2 节省时间与资源1.3 增强用户体验 了解ChatGPT的工作原理🧠2.1 语言模型的训练过程2.2 上下文理解与生成2.3 限制与挑战 高价值提示词的核心要素✍️3.1 清晰明确的指…

D74【 python 接口自动化学习】- python 基础之HTTP

day74 http基础定义 学习日期:20241120 学习目标:http定义及实战 -- http基础介绍 学习笔记: HTTP定义 HTTP 是一个协议(服务器传输超文本到浏览器的传送协议),是基于 TCP/IP 通信协议来传递数据&…

2025 -生物信息学- GEO - 神经网络分析-ANN

GEO - 神经网络分析-ANN 01. 准备文件 id GSM3587381_con GSM3587382_con GSM3587383_con GSM3587384_con GSM3587385_con GSM3587386_con GSM3587387_con GSM3587388_con GSM3587389_con GSM3587390_con GSM3587391_con GSM3587392_con GSM3587393_con GSM3587394_con GSM358…

uniapp页面样式和布局和nvue教程详解

uniapp页面样式和布局和nvue教程 尺寸单位 uni-app 支持的通用 css 单位包括 px、rpx px 即屏幕像素。rpx 即响应式px,一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准,750rpx恰好为屏幕宽度。屏幕变宽,rpx 实际显示效果会等比放大…

5G Non-Public Network(三)Public Network Integrated NPN

这篇我们来看下PNI-NPN,之前都没有提到NPN引入的背景,这里就简单看下。 NPN引入的背景如上,就不细说了,贴在这里,确实很简单的看了下。紧接着就来看下规范上的内容。 相比于SNPN,PNI-NPN是PLMN提供的NPN,内容也要少很多,下面的内容参考38.300,38.331 ,38.304,23.50…

⾃动化运维利器Ansible-基础

Ansible基础 一、工作原理二、快速入门2.1 测试所有资产的网络连通性2.2 发布文件到被管理节点(资产) 三、资产(被管理节点)3.1 静态资产3.1.1 自定义资产3.1.2 自定义资产的使用3.1.3 资产选择器 四、Ansible Ad-Hoc 命令4.1 模块类型4.1.1 command & shell 模块4.1.2 cop…

一文了解Android中的AudioFlinger

AudioFlinger 是 Android 音频框架中的一个核心组件,负责管理音频流的混合和输出。它是 Android 音频系统服务的一部分,作为音频框架和硬件之间的桥梁,接收应用程序的音频请求、进行混音处理,并最终通过音频硬件输出声音。 下面我…

基于YOLOv8深度学习的智慧交通事故评级检测系统研究与实现(PyQt5界面+数据集+训练代码)

本文研究并实现了一种基于YOLOv8深度学习模型的智慧交通事故评级检测系统,旨在解决传统交通事故检测过程中效率低、误报率高等问题。该系统通过深度学习技术的应用,结合交通事故图像的分析,能够实现对事故的精准识别和评级,进而为…

使用MaxKB搭建知识库问答系统并接入个人网站(halo)

首发地址(欢迎大家访问):使用MaxKB搭建知识库问答系统并接入个人网站 前言 从OpenAI推出ChatGPT到现在,大模型已经渗透到各行各业,大模型也逐渐趋于平民化;从最开始对其理解、生成、强大的知识积累的惊叹&…

Android15之解决:Dex checksum does not match for dex:framework.jar问题(二百三十九)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

快速搭建Android开发环境:Docker部署docker-android并实现远程连接

目录 前言 1. 虚拟化环境检查 2. Android 模拟器部署 3. Ubuntu安装Cpolar 4. 配置公网地址 5. 远程访问 小结 6. 固定Cpolar公网地址 7. 固定地址访问 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊快速搭建Android开发环境&#x…

第十二章 并行Stream流

目录 一、引言 二、获取并行Stream流的两种方式 三、并行和串行Stream流的效率对比 四、parallelStream线程安全问题 五、parallelStream背后的技术 5.1. Fork/Join框架介绍 5.2. Fork/Join原理-分治法 5.3. Fork/Join原理-工作窃取算法 5.4. Fork/Join案例 一、引言 …

【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)

文章目录 前言一、自定义拦截器二、自定义操作1.自定义颜色1.1.样式未生效原因:1.2.解决方法: 2.合并单元格 三、复杂操作示例1.实体(使用了注解式样式):2.自定义拦截器3.代码4.最终效果 前言 本文简单介绍阿里的EasyExcel的复杂导出操作&…

Excel单元格中自适应填充多图

实例需求:在Excel插入图片时,由于图片尺寸各不相同,如果希望多个图片填充指定单元格,依靠用户手工调整,不仅费时费力,而且很难实现完全填充。如下图中的产品图册,有三个图片,如下图所…

【C++笔记】vector使用详解及模拟实现

前言 各位读者朋友们,大家好!上期我们讲了string类的模拟实现,这期我们开启vector的讲解。 一.vector的介绍及使用 1.1 vector的介绍 vector的文档 使用STL的三个境界:能用、明理、能扩展,下面学习vector&#xff…

LLM评测范式与方法

文章目录 基础大语言模型的评测微调大语言模型的评测不同评测方法的利弊为了有效地评估大语言模型的性能,一种主流的途径就是选择不同的能力维度并且构建对应的评测任务,进而使用这些能力维度的评测任务对模型的性能进行测试与对比。可供选择的能力维度包括但不限于本书所介绍…

3D Gaussian Splatting的全面理解

1.概述 高斯泼溅是一种表示 3D 场景和渲染新视图的方法,在“用于实时辐射场渲染的 3D 高斯泼溅3d-gaussian-splatting”这篇论文中被首先提出。它可以被认为是类似 NeRF模型型的替代品,就像过去的 NeRF 一样,高斯泼溅衍生出了许多新的研究工作,研究人员选择将其用作各种用…

《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人

课程 《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客 我们希望你创建一个定制的服务机器人。 您可以想出任何您希望机器人执行的任务,例如,一个可以解决简单的数学问题的机器人0 一个机器人&#xff0c…

vue包含二维码、背景图片、Logo图片和文本说明的图片生成及下载功能

要使用npm安装vue-qr和html2canvas这两个库 npm install vue-qr html2canvas 完整代码 可以根据实际项目需求调整&#xff0c;改成调用接口展示 <template><div><div ref"qrContainer" class"qr-container"><img class"back…

Oracle ADB 导入 BANK_GRAPH 的学习数据

Oracle ADB 导入 BANK_GRAPH 的学习数据 1. 下载数据2. 导入数据运行 setconstraints.sql 1. 下载数据 访问 https://github.com/oracle-quickstart/oci-arch-graph/tree/main/terraform/scripts&#xff0c;下载&#xff0c; bank_accounts.csvbank_txns.csvsetconstraints.…