《Spring Guides系列学习》guide66 - guide68及小结

news2024/11/26 0:27:46

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。

在这里插入图片描述

接着上篇看过的guide65,接着往下看。

guide66、Spring Cloud Circuit Breaker Guide

首先了解下Spring Cloud Circuit Breaker是Spring Cloud提供的一组用于实现断路器模式的组件,其中包括Hystrix和Resilience4J两种实现方式。

在了解下断路器模式:

断路器模式(Circuit Breaker Pattern)是一种用于处理分布式系统中故障的设计模式。在分布式系统中,各个服务之间的网络通信容易受到网络故障、超时、延迟、资源不足等问题的影响,如果不进行有效处理,可能会导致系统崩溃或无法正常工作。断路器模式通过在服务之间插入一个断路器组件,监控服务调用的状态,并在出现故障时自动切换到备用方案,避免了故障的传递和系统的崩溃。

断路器模式通常包含以下几个组件:

  1. 断路器状态:断路器可以处于开启、关闭或半开状态。开启状态表示服务调用失败,在一定时间内不会再次尝试调用服务;关闭状态表示服务调用正常,可以尝试调用服务;半开状态表示断路器正在尝试重新调用服务,如果调用成功,则切换到关闭状态,否则切换到开启状态。
  2. 断路器监控器:用于监控服务调用的状态,根据状态切换断路器状态。
  3. 服务调用:需要进行断路器保护的服务调用。
  4. 备用方案:当服务调用失败时,切换到的备用方案,通常是返回缓存数据、调用备用服务、返回默认值等。

断路器模式可以有效提高分布式系统的稳定性和可靠性,防止故障的传递和系统的崩溃,从而提高用户体验和业务效率。

这篇guide采用的是Resilience4J。

要简单实现断路器,要设置至少两个服务。

先设置一个Bookstore服务,可以访问/recommended端点,然后返回String。

@RestController
@SpringBootApplication
public class BookstoreApplication {

  @RequestMapping(value = "/recommended")
  public Mono<String> readingList(){
    return Mono.just("Spring in Action (Manning), Cloud Native Java (O'Reilly), Learning Spring Boot (Packt)");
  }

  public static void main(String[] args) {
    SpringApplication.run(BookstoreApplication.class, args);
  }
}

再启动另外一个服务reading,算作是bookstore应用程序的前端,我们在reading服务提供/to-read接口,该接口从bookstore调用服务。

@Service
public class BookService {
  private static final Logger LOG = LoggerFactory.getLogger(BookService.class);
  private final WebClient webClient;
  private final ReactiveCircuitBreaker readingListCircuitBreaker;
  public BookService(ReactiveCircuitBreakerFactory circuitBreakerFactory) {
    this.webClient = WebClient.builder().baseUrl("http://localhost:8090").build();
    this.readingListCircuitBreaker = circuitBreakerFactory.create("recommended");
  }

  public Mono<String> readingList() {
    return readingListCircuitBreaker.run(webClient.get().uri("/recommended").retrieve().bodyToMono(String.class), throwable -> {
      LOG.warn("Error making request to book service", throwable);
      return Mono.just("Cloud Native Java (O'Reilly)");
    });
  }
@RestController
@SpringBootApplication
public class ReadingApplication {
    
  @Autowired
  private BookService bookService;
  
  @RequestMapping("/to-read")
  public Mono<String> toRead() {
    return bookService.readingList();
  }
  public static void main(String[] args) {
    SpringApplication.run(ReadingApplication.class, args);
  }
}

注意两个服务端口要不同,然后运行两个端口,访问localhost:8080/to-read,

会返回:

在这里插入图片描述

关闭bookstore服务,熔断器齐了作用,返回:
在这里插入图片描述


guide67、Building a Guide with VS Code

就是介绍下用vs code创建和打开项目。


Building a GraphQL service

GraphQL是一种用于API设计的查询语言和运行时环境。它可以让客户端应用程序准确地描述它们需要的数据,并从API中获取它们,而不是返回整个文档或数据集,从而提高了API的效率和可扩展性。

使用 Spring for GraphQL 创建服务器的主要步骤:

  • 定义 GraphQL 模式
  • 实现逻辑以获取查询的实际数据

guide中的应用程序就是一个简单的 API,用于获取特定书籍的详细信息。

定义graphql模式:

type Query {
    bookById(id: ID): Book
}

type Book {
    id: ID
    name: String
    pageCount: Int
    author: Author
}

type Author {
    id: ID
    firstName: String
    lastName: String
}

每个 GraphQL schema 都有一个顶级Query类型,它下面的字段是应用程序公开的查询操作。这里的模式定义了一个名为查询的查询bookById,它返回一本特定书籍的详细信息。

还定义了Book和Author两种类型。

在GraphQL中,Schema(模式)定义了API的类型系统和可用操作。它是一个描述所有可用类型和操作的约定。
Schema由类型定义和字段定义组成,它定义了可用的查询和变更操作以及它们的参数和返回类型。Schema还定义了类型之间的关系,例如对象之间的关联、列表和非空约束等。
在GraphQL中,Schema是API的核心,它定义了客户端可以查询的所有数据和操作。客户端可以使用Schema来构建查询,并使用Schema来验证查询是否符合API的约定。

数据来源:

GraphQL 的一个关键优势是可以从任何地方获取数据。数据可以来自数据库、外部服务或静态内存列表。

为了简化教程,书籍和作者数据将来自各自类中的静态列表。

创建Book和Author数据源:也就是Book和Author类

public class Author {
    private String id;
    private String firstName;
    private String lastName;
    private static List<Author> authors = Arrays.asList(
            new Author("author-1", "Joshua", "Bloch"),
            new Author("author-2", "Douglas", "Adams"),
            new Author("author-3", "Bill", "Bryson")
    );
    public static Author getById(String id) {
        return authors.stream()
                .filter(author -> author.getId().equals(id))
                .findFirst()
                .orElse(null);
    }
    ...
public class Book {
    private String id;
    private String name;
    private int pageCount;
    private String authorId;
    private static List<Book> books = Arrays.asList(
            new Book("book-1", "Effective Java", 416, "author-1"),
            new Book("book-2", "Hitchhiker's Guide to the Galaxy", 208, "author-2"),
            new Book("book-3", "Down Under", 436, "author-3")
    );
    public static Book getById(String id) {
        return books.stream()
                .filter(book -> book.getId().equals(id))
                .findFirst()
                .orElse(null);
    }
    ...

Spring for GraphQL 提供了一种基于注解的编程模型。使用控制器注解方法,我们可以声明如何获取特定 GraphQL 字段的数据。

@Controller
public class BookController {
    @QueryMapping
    public Book bookById(@Argument String id) {
        return Book.getById(id);
    }

    @SchemaMapping
    public Author author(Book book) {
        return Author.getById(book.getAuthorId());
    }
}

通过定义一个被@QueryMapping注释的方法bookById,就可以获取Book。

@Argument是一个GraphQL Java库中的注解,用于将方法参数映射到GraphQL查询或变量中的参数。通过将@Argument注解添加到处理程序方法的参数上,可以指定参数的名称、类型、默认值和是否必需等信息。这样,GraphQL查询就可以使用相应的参数来调用处理程序方法。

GraphiQL 是一个有用的可视化界面,用于编写和执行查询等。通过将此配置添加到application.properties文件来启用 GraphiQL。

spring.graphql.graphiql.enabled=true

启动程序后,导航到:http://localhost:8080/graphiql?path=/graphql

左边输入查询语句:

在这里插入图片描述

也可以用postman测试:

在这里插入图片描述


后半部分小结:

35:介绍了spring里的调度任务,核心是注解@Scheduled和@EnableScheduling。

36:用gradle去创建管理项目,构建方式类似于maven,核心在于build.gradle文件。

37:主要介绍了jdbcTemplate的使用,其就是在jdbc上面对数据库的操作做了深层次的封装。

38:用Spring Security的嵌入式LDAP服务器保护应用程序。

39:用RabbitTemplate来进行消息的发送和接收。RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件。

40:通过javax.validation中的验证注解对表单输入进行检查。

41:用jms进行消息的发送接收。其中使用JmsTemplate来发消息。

42:介绍了spring security, SecurityFilterChain bean定义哪些URL路径被保护, 哪些不用经过身份验证。

43:在Apache Geode数据管理系统上,使用spring data进行数据操作。

44:利用spring cache将数据缓存到Apache Geode。

45:使用 Spring Data JPA 存储和检索数据

46、介绍了spring mvc框架,请求从客户端发送到控制器(Controller),然后控制器根据业务逻辑处理请求,并将结果传递给视图(View),最后视图将结果渲染成 HTML 或其他格式的响应发送给客户端。

47、创建异步的方法,讲了@Async注解。

48、用springboot构建程序。

49、使用sts的简易教程,现在都不用sts了。

50、用jquery去ajax访问restful服务。

51、介绍了解了soap服务。

52、使用Spring Data REST检索存储在Neo4j NoSQL的数据。

53、使用Spring Data REST检索数据,和上篇讲的基本一致,就是把底层数据存储结构变为了Pivotal GemFire。

54、使用spring缓存,核心是@cacheable、@cacheput等注解。

55、介绍使用intelliJ IDEA创建打开程序。

56、用Eureka来做服务注册中心,进行服务注册和发现。

57、用spring进行单元测试,除了springTest注解可以加载整个应用上下文之外,还可以使用@WebMvcTest注解,将测试缩小到web层。

58、用maven进行多模块管理,这个也在之前部门项目里学习过。

59、使用google cloud pub/sub进行消息传输,仅了解。

60、一种API设计模式Consumer Driven Contracts,其中API使用者定义了他们期望API提供者提供的行为。

61、使用Vault,将配置属性存储在 Vault 中,构建 Spring 应用程序并将其与 Vault 连接使用。Vault 是一个数据管理系统,允许存储静态加密的敏感数据。

62、将一个应用程序部署到Azure的操作步骤,仅了解下。

63、构建一个微服务应用程序,该应用程序使用 Spring Cloud LoadBalancer 在对另一个微服务的调用中提供客户端负载平衡。核心是@LoadBalanced 以及@LoadBalancerClient 注解。

64、介绍了解了Spring Cloud Data Flow ,一个用于构建和管理数据流管道的开源工具。

65、介绍了Kubernetes, 也就是K8s,开源的容器编排和管理平台。

66、了解Spring Cloud Circuit Breaker,是Spring Cloud提供的一组用于实现断路器模式的组件。

67、介绍用vs code创建打开项目。

68、介绍了GraphQL,是一种用于API设计的查询语言和运行时环境。它可以让客户端应用程序准确地描述它们需要的数据,并从API中获取它们,而不是返回整个文档或数据集。

目前guide已基本看完,还有一些模块没有深入了解,比如:docker、 响应式编程、k8s、spring框架剖析(接下来主要去看这块)。

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

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

相关文章

深入了解Golang中的反射机制

目录 反射 反射的分类 值反射 类型反射 运行时反射 编译时反射 接口反射 结构体反射 常用函数 值反射 类型反射 值反射和类型反射的区别 结构体反射 示例代码 反射 反射是指在程序运行时动态地检查和修改对象的能力。在Go语言中&#xff0c;通过反射可以在运行时…

chatgpt赋能python:Python逆序对:什么是逆序对,如何使用Python进行逆序对计算?

Python逆序对&#xff1a;什么是逆序对&#xff0c;如何使用Python进行逆序对计算&#xff1f; 在计算机科学中&#xff0c;逆序对是指在一个数组中&#xff0c;如果存在下标i < j&#xff0c;但是a[i] > a[j]&#xff0c;则a[i]和a[j]构成一个逆序对。逆序对对于理解和…

pthread多线程:传入参数并检查 data race

文章目录 1. 目的2. 给子线程传入参数&#xff1a;万能类型 void*3. data race3.1 什么是 data race3.2 怎样检测 data race 4. data race 的例子4.1 子线程传入同一个 data4.2 使用栈内存 5. 解决 data race 问题5.1 忽视问题&#xff1f;5.2 避开同一个变量的使用5.3 使用互斥…

Office project 2010安装教程

哈喽&#xff0c;大家好。今天一起学习的是project 2010的安装&#xff0c;Microsoft Office project项目管理工具软件&#xff0c;凝集了许多成熟的项目管理现代理论和方法&#xff0c;可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?

String str"i"与 String strnew String(“i”)一样吗&#xff1f; 要想知道二者是否一样&#xff0c;我们只需要通过进行比较&#xff0c;为什么不用equals的原因&#xff0c;大家可以认真阅读这篇文章 测试代码如下&#xff1a; public class Test1 {public stati…

chatgpt赋能python:Python选择器:优化你的SEO

Python 选择器&#xff1a;优化你的SEO 介绍 随着搜索引擎优化(SEO)变得越来越重要&#xff0c;Web 开发人员需要采取各种措施来提高网站的搜索排名。其中之一就是通过使用正确的 HTML 标签和优秀的内容来提高搜索引擎爬虫对网站的理解。这时候 Python 选择器就变得尤为重要。…

chatgpt赋能python:Python选择函数

Python 选择函数 Python是一种流行的编程语言&#xff0c;是许多开发人员的首选。在Python中&#xff0c;有许多函数可供开发人员使用。这些函数不仅提高了开发的速度&#xff0c;而且还可以帮助我们更快地解决许多问题。在本文中&#xff0c;我们将重点介绍Python选择函数。 …

iostat详解

iostat在centOS中默认没有 安装 yum install sysstat 使用 iostat -dxk 5 rrqm/s 每秒进入队列的合并读写请求数 wrqm/sr/s每秒发送到设备的读写请求数w/srKB/s每秒读写的吞吐量&#xff0c;单位KBwKB/savgrq-sz 以扇区为大小的请求大小 avgqu-sz设备队列中等待的请求数await在…

HNU-电路与电子学-综合设计-模型机

写在前面&#xff1a; 每一年的综合设计肯定都有改动&#xff0c;故肯定不能照搬照抄&#xff0c;大家可以借鉴思路&#xff0c;复现成果&#xff0c;但要注意不同之处&#xff0c;以免被0分处理。 模型设计的指导书我不放在这里了&#xff0c;因为那是课程组老师们的成果。 …

HNU-电路与电子学-学习建议

电路与电子学我考的并不好&#xff0c;最后总评只有85分。 &#xff08;主要是期末考太差了&#xff0c;只有70分&#xff0c;前面基本全拿满了&#xff0c;也无济于事&#xff09; 但我自认为学的还可以&#xff0c;于是写下一些感想。 我姑妄言之&#xff0c;诸位姑妄信之…

【华为OD机试】投骰子【2023 B卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6, 用123456表示这个状态,放置在平面上, 可以向左翻转(用L表示向左翻转1次), 可以向右翻转(用…

C Primer Plus第九章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.设计一个函数min(x, y)&#xff0c;…

【利用AI让知识体系化】5种创建型模式

文章目录 创建型模式简介工厂模式抽象工厂模式单例模式建造者模式原型模式 创建型模式 简介 创建型模式&#xff0c;顾名思义&#xff0c;是用来创建对象的模式。在软件开发中&#xff0c;对象的创建往往比一般的编程任务更为复杂&#xff0c;可能涉及到一些琐碎、复杂的过程…

Boosting以及代表算法(Adaboost、GBDT)介绍

一、Boosting介绍 1.什么是Boosting Boosting&#xff08;提升&#xff09;是一种集成学习方法&#xff0c;通过组合多个弱学习器来构建一个强学习器。与Bagging不同&#xff0c;Boosting采用了序列化的方式构建模型&#xff0c;每个弱学习器都是在前一个弱学习器的基础上进行…

Linux-0.11 文件系统exec.c详解

Linux-0.11 文件系统exec.c详解 模块简介 该模块实现了二进制可执行文件和shell脚本文件的加载和执行。 函数详解 create_tables static unsigned long * create_tables(char * p,int argc,int envc)该函数的作用是建立参数和环境变量指针表。 create_table的作用就是建立…

玄子Share - IDEA 2023.1 自定义 代码模板(Servlet)

玄子Share - IDEA 2023.1 自定义 代码模板&#xff08;Servlet&#xff09; 23版 IDEA 内取消了自动生成 Servlet 模板类&#xff0c;不过我们可以自己定义一个 Servlet 模板 步骤 第一步打开 IDEA 设置界面&#xff0c;编辑器 -> 文件和代码模板 -> 点击加号新建模板…

chatgpt赋能python:Python补齐0,让你在编程中更得心应手

Python 补齐0&#xff0c;让你在编程中更得心应手 在Python编程中&#xff0c;我们经常会遇到数字需要补齐0的情况。比如说我们要制作一个日期格式的字符串&#xff0c;例如“2022-02-22”&#xff0c;但是当天数只有一位数时&#xff0c;需要在前面补0&#xff0c;即“2022-0…

chatgpt赋能python:Python转换器——将数据转换为所需格式的工具

Python 转换器——将数据转换为所需格式的工具 Python 是一种功能强大的编程语言&#xff0c;因为它具有处理和分析数据的能力&#xff0c;因此被广泛使用。然而&#xff0c;在现代互联网时代&#xff0c;数据的格式和大小通常不相同&#xff0c;因此经常需要将数据从一种格式…

chatgpt赋能python:Python词形还原:一种优化搜索引擎排名的方法

Python词形还原&#xff1a;一种优化搜索引擎排名的方法 什么是词形还原&#xff1f; 词形还原是自然语言处理&#xff08;NLP&#xff09;中的一种重要技术。它是将单词转化为其最基本的形式的过程&#xff0c;例如动词的原形或名词的单数形式。这个过程旨在帮助计算机更好地…

openGauss 3.1企业版升级至5.0

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…