IDEA 搭建 SpringCloud 项目【超详细步骤】

news2024/12/27 12:07:33

文章目录

    • 一、前言
    • 二、项目搭建
      • 1. 数据库准备
      • 2. 创建父工程
      • 3. 创建注册中心
      • 4. 服务注册
      • 5. 编写业务代码
      • 6. 服务拉取

一、前言

所谓微服务,就是要把整个业务模块拆分成多个各司其职的小模块,做到单一职责原则,不会重复开发相同的业务代码,实现真正意义上的高内聚、低耦合。同时,微服务可以对外暴露接口,供其它微服务使用。

如果我们在 A 服务中发起一个 http 请求到 B 服务,那么就可以实现微服务的远程调用。(restTemplate 的 getForObject 方法可以向浏览器发起请求)
这种方法看起来是可行的,但是把 url 路径和 Java 代码耦合到一起,是不符合开闭原则的。于是就出现了 Eureka 注册中心。

每一个微服务在启动的那一刻都需要做一件事情,就是把自己的服务信息注册给 Eureka,比如服务名称、服务端口等,其它微服务想要调用另一个服务的时候,直接去 Eureka 里面拉取信息就可以了。
同时,为了避免拉取的服务已经挂掉了,我们的服务每隔 30 秒就会向 Eureka 发起一次心跳,来证明自己还活着,如果有一天不跳了,Eureka 就会把它从注册列表中剔除。

如果存在多个服务提供者,服务消费者就会利用负载均衡算法,从服务列表中挑选一个!

二、项目搭建

1. 数据库准备

此处我们要准备两个数据库,user 服务和 order 服务各自拥有自己的数据库。

CREATE TABLE USER (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone VARCHAR(15) NOT NULL,
address VARCHAR(50) NOT NULL
);

INSERT INTO USER VALUES (1, "栈老师不回家", 13299075426, "山西省大同市")
INSERT INTO USER(NAME, phone, address) VALUES ("肖恩", 18834267011, "山西省太原市")
INSERT INTO USER(NAME, phone, address) VALUES ("李华", 12481076533, "山西省运城市")

在这里插入图片描述

CREATE TABLE orders (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
price INT NOT NULL,
user_id INT NOT NULL REFERENCES USER(id)
)

INSERT INTO orders VALUES (1, "可乐鸡翅", 32, 1);
INSERT INTO orders(NAME, price, user_id) VALUES("冰镇啤酒", 12, 1);
INSERT INTO orders(NAME, price, user_id) VALUES("草莓冰激凌", 8, 2);
INSERT INTO orders(NAME, price, user_id) VALUES("狼牙土豆", 10, 3);

在这里插入图片描述

2. 创建父工程

① 还是 SpringBoot 项目,选择 Spring Web 依赖

在这里插入图片描述

在这里插入图片描述

② 删掉 src 目录及 mvnw 开头的两个文件

在这里插入图片描述

③ 在 pom 文件中添加 packaging 标签和 SpringCloud 版本,并修改 SpringBoot 版本

在这里插入图片描述

④ 引入 mysql 和 mybatis 依赖,供后续使用

在这里插入图片描述

⑤ 添加 SpringCloud 依赖库,后续子模块使用的时候就不需要再指定版本了

在这里插入图片描述

3. 创建注册中心

① 在父级项目上新建模块

在这里插入图片描述

② 选择 Eureka Server

在这里插入图片描述

③ 修改子模块的 parent 标签内容,指向父工程

在这里插入图片描述

因为父模块中已经指定了 SpringCloud 的版本,所以子模块不需要再重复写!

④ 在父级 pom 中添加该子模块

在这里插入图片描述

⑤ 因为子类会继承父类的依赖,所以子类中多余的依赖可以删掉,后续需要什么加什么

在这里插入图片描述

⑤ 编写 application.yml 文件

#服务端口,随便起
server:
  port: 11011
#服务名称
spring:
  application:
    name: eurekaserver
  datasource:
    url: jdbc:mysql:///ZXEdb?serverTimezone=UTC
    username: root
    password: 856724bb
    driver-class-name: com.mysql.cj.jdbc.Driver

#eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:11011/eureka/
    register-with-eureka: false
    fetch-registry: false
    

在这里插入图片描述

服务名称和 eureka 地址的配置我们可以认为是服务注册的配置,而 eureka 自己也是一个微服务,所以在服务启动的时候,它也会把自己注册到 eureka 上!

⑥ 启动类上添加 @EnableEurekaServer 注解

在这里插入图片描述

⑦ 输入 http://localhost:11011/,出现以下界面即 Eureka 创建成功。

在这里插入图片描述

4. 服务注册

情形:
创建一个 order 服务和一个 user 服务,并把它们都注册到 eureka 中。order 里面需要用到 user,所以此时的 order 是消费者,user 是提供者。

对于服务的注册,我们只需要完成两步:
① 引入 spring-cloud-starter-netflix-eureka-client 依赖;
② 在 yml 文件中配置服务名称和 eureka 地址。

eureka 服务的依赖是 server,其余微服务都是 client!

① 创建 order 服务和 user 服务

在这里插入图片描述

② 引入 eureka 客户端依赖

在这里插入图片描述

在这里插入图片描述

③ 在父级 pom 中添加该子模块

在这里插入图片描述

④ 编写 yml 配置文件

#服务端口,随便起
server:
  port: 8081
#服务名称
spring:
  application:
    name: userserver
  datasource:
    url: jdbc:mysql:///user?serverTimezone=UTC
    username: root
    password: 856724bb
    driver-class-name: com.mysql.cj.jdbc.Driver

#eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:11011/eureka/

在这里插入图片描述

④ 启动类上添加 @EnableEurekaServer 注解

在这里插入图片描述

以上是 user 的注册,order 同理!

在这里插入图片描述

5. 编写业务代码

要求查询订单表,其中订单表里面包含用户信息。

① 实体类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

② 配置文件中添加驼峰命名功能及实体映射

#开启驼峰命名及实体映射
mybatis:
  type-aliases-package: com.zxe.orderserver.pojo
  configuration:
    map-underscore-to-camel-case: true
    

③ 编写数据层、业务层及控制层的代码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6. 服务拉取

服务拉取是基于服务名称获取服务列表,然后再对服务列表做负载均衡。

① 在 order-service 的启动类中注册 RestTemplate

在这里插入图片描述

@LoadBalanced 注解用来做负载均衡!

② 编写 OrderService 代码,order 要调用 user,自然要用到 user 接口的访问路径,此处的路径中我们用服务名来代替 localhost

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order findById(Integer id) {
        Order order = orderMapper.find(id);
        String url = "http://userserver/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
        return order;
    }
}

③ 运行结果

在这里插入图片描述

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

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

相关文章

HC-SR501传感器制作一个报警系统

接线图: 引脚连接: 1. 将 PIR 信号引脚连接到 arduino 数字 引脚 13。 2. 将 PIR V 引脚连接 到 arduino 5v 引脚。 3. 将 PIR GND 引脚连接到 arduino GND 引脚。 4. 将arduino数字 引脚12连接 到220欧姆电阻,并将该电阻连接到 LED V …

用户增长模型:3A3R策略模型

一、概述 A - A - A - R - R - R 增长模型,即3A3R策略模型,由海盗模型演变而来,是目前使用最多、适用范围最广的增长策略模型。原始的海盗模型由 Acquisition (获客)、 Activation (活跃)、 Re…

mfc140.dll是什么文件?如何修复mfc140.dll丢失的方法分享

​mfc140.dll丢失的原因 未正确安装Microsoft Visual C Redistributable:mfc140.dll是Visual C库的一部分,如果没有正确安装Visual C Redistributable,可能导致mfc140.dll丢失。 系统文件损坏:由于病毒感染、系统错误或其他原因…

Java面向对象(高级)-- 单例(Singleton)设计模式

文章目录 一、单例设计模式(1) 设计模式概述(2) 何为单例模式(3) 实现思路(4) 单例模式的两种实现方式1. 饿汉式2. 懒汉式3. 饿汉式 vs 懒汉式 (5) 单例模式的…

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(九)

UNION ALL UNION ALL 用于合并两个或多个 SELECT 语句的结果。 请注意,UNION ALL 合并的每个 SELECT 语句必须是查询相同数量,相同数据类型的字段,且顺序也必须一致。另外结果集中的列名总是等于 UNION ALL 中第一个 SELECT 语句中的列名。 …

PyQt(学习笔记)

学习资料来源: PyQt快速入门——b站王铭东老师 PyQt(学习笔记) Pycharm环境准备运行第一个程序QPushButtonQLabelQLineEdit调整窗口大小、位置、图标布局信号与槽PyQt引入多线程 Pycharm环境准备 新建环境——添加PyQt5模块——验证版本 如果…

视频封面:从视频中提取封面,轻松制作吸引人的视频

在当今的数字时代,视频已成为人们获取信息、娱乐和交流的重要方式。一个吸引人的视频封面往往能抓住眼球,提高点击率和观看率。今天将介绍如何从视频中提取封面,轻松制作吸引人的视频封面。 一、准备素材选择合适的视频片段 首先&#xff0…

光敏传感器模块(YH-LDR)

目录 1. YH-LDR模块说明 1.1 简介 1.2 YH-LDR 模块的引脚说明 1.3 LDR 传感器工作原理与输出特性 2. 使用单片机系统控制 YH-LDR 模块 2.1 通用控制说明 1. YH-LDR模块说明 1.1 简介 YH-LDR 是野火设计的光强传感器,使用一个光敏电阻作为采集源&#x…

设计模式(二)-创建者模式(2)-工厂模式

一、为何需要工厂模式(Factory Pattern)? 由于简单工厂模式存在一个缺点,如果工厂类创建的对象过多,使得代码变得越来越臃肿。这样导致工厂类难以扩展新实例,以及难以维护代码逻辑。于是在简单工厂模式的基础上&…

SPASS-距离分析

基本概念 距离分析是对观测量之间相似或不相似程度的一种测度,是计算一对观测量之间的广义距离。这些相似性或距离测度可以用于其他分析过程,例如因子分析、聚类分析或多维定标分析,有助于分析复杂的数据集。 统计原理 不相似性测度 对定距…

STM32F4系列单片机GPIO概述和寄存器分析

第2章 STM32-GPIO口 2.1 GPIO口概述 通用输入/输出口 2.1.1 GPIO口作用 GPIO是单片机与外界进行数据交流的窗口。 2.1.2 STM32的GPIO口 在51单片机中,IO口,以数字进行分组(P0~P3),每一组里面又有8个IO口。 在ST…

月子会所信息展示服务预约小程序的作用是什么

传统线下门店经营只依赖自然流量咨询或简单的线上付费推广是比较低效的,属于靠“天”吃饭,如今的年轻人学历水平相对较高,接触的事物或接受的思想也更多更广,加之生活水平提升及互联网带来的长期知识赋能,因此在寻找/咨…

【刷题专栏—突破思维】LeetCode 142. 环形链表 II

前言:本篇博客将讲解三个OJ题,前两个作为铺垫,最后完成环形链表的节点的寻找 文章目录 一、160. 相交链表二、141. 环形链表三、142. 环形链表II 一、160. 相交链表 题目链接:LeetCode—相交链表 题目描述: 给你两个单…

【心得】PHP的文件上传个人笔记

目录 1 php的文件上传绕过 黑名单绕过 2 php文件上传的00截断 3 iconv字符转换异常后造成了字符截断 4 文件后缀是白名单的时候的绕过 web服务器的解析漏洞绕过 5.高级文件上传绕过 1 .htaccess nginx.htaccess 2 服务端内容检测 3 配合伪协议来绕过 4.配合日志包含绕…

2023年【安全员-B证】考试内容及安全员-B证考试资料

题库来源:安全生产模拟考试一点通公众号小程序 安全员-B证考试内容参考答案及安全员-B证考试试题解析是安全生产模拟考试一点通题库老师及安全员-B证操作证已考过的学员汇总,相对有效帮助安全员-B证考试资料学员顺利通过考试。 1、【多选题】《中华人民…

FL Studio2024免费编曲音乐制作软件

用FL Studio编曲,让音乐成为你的翅膀,飞翔在无尽的创作海洋中吧! FL Studio作为一款功能强大且备受赞誉的音乐制作软件,为你提供了一个独特的创作平台。通过FL Studio,你可以自由地创作、编曲,制作属于自己…

【算法萌新闯力扣】:旋转字符串

力扣热题:796.旋转字符串 开篇 今天下午刷了6道力扣算法题,选了一道有多种解法的题目与大家分享。 题目链接:796.旋转字符串 题目描述 代码思路 完全按照题目的要求,利用StringBuffer中的方法对字符串进行旋转,寻找相同的一项 …

Fibonacci 数列与黄金分割

mapp[1 for item in range(30)] for item in range(3,30):mapp[item]mapp[item-1]mapp[item-2]pass numint(input()) if num>19:print("0.61803399")pass else:anss float((mapp[num]*1.0) / (mapp[num 1]*1.0))print(format(anss,.8f))进行短程的打表就可以看出…

指南:关于帮助中心需要注意的一些细节

在现代商业环境中,帮助中心已经成为企业提供客户支持和解决问题的重要方式之一。然而,建立一个高效的帮助中心并不简单。除了选择合适的软件平台和工具之外,还需要注意一些细节,以确保能够真正帮助客户并提高客户满意度。 | 1.设计…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如,下面的类RegisterResponse 使用了XmlRootElement注解,同时也使用XmlType注解,并用XmlType注解的propOrder属性,指定了两个用XmlElement注解的元素出现的顺序,先出现flag,后出现enterpriseId&#xff0…