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

文章目录

    • 一、前言
    • 二、项目搭建
      • 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: eurekaserverdatasource:url: jdbc:mysql:///ZXEdb?serverTimezone=UTCusername: rootpassword: 856724bbdriver-class-name: com.mysql.cj.jdbc.Driver#eureka地址
eureka:client:service-url:defaultZone: http://127.0.0.1:11011/eureka/register-with-eureka: falsefetch-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: userserverdatasource:url: jdbc:mysql:///user?serverTimezone=UTCusername: rootpassword: 856724bbdriver-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.pojoconfiguration:map-underscore-to-camel-case: true

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

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6. 服务拉取

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

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

在这里插入图片描述

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

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

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate 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.mzph.cn/news/153387.shtml

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

相关文章

Pyinstaller 打包程序 python-oracledb 报错 DPY-3016问题解决方案

执行xxx.exe文件调用oracledb 时报错 DPY-3016:python-oracledb thin mode cannot be used because the cryptography package is not installed 原因是其隐式调用了cryptography ,打包时加入参数 –hidden-importcryptography.hazmat.primitives.kdf.pbkdf2解决 p…

什么是调试和性能分析工具?

调试和性能分析工具是软件开发过程中的关键工具,它们用于诊断、修复错误(bug)以及优化程序性能。这两类工具在不同阶段发挥关键作用: 调试工具: 定义: 调试是指在程序开发过程中,通过运行程序…

解码算力需求:迎接AIGC时代的数据中心革命

随着人工智能(AI)和大规模计算(GC)的蓬勃发展,数据中心正迎来一场前所未有的革命。在这个被称为AIGC时代的新时代,解码算力需求成为推动创新、驱动技术进步的关键因素。本文将深入探讨AIGC时代数据中心的挑…

常用的数据库类别及介绍

常用的数据库有以下几种: 1.关系型数据库(RDBMS): MySQL MySQL是一种开源的关系型数据库管理系统,广泛用于Web应用程序开发。它是由瑞典公司MySQL AB开发的,后来被Oracle收购。MySQL具有高性能、可靠性和…

数据预处理pandas pd.json_normalize占用内存过大优化

问题描述 从ES下载数据,数据格式为json,然后由pandas进行解析,json中的嵌套字段会进行展开作为列名(由于维度初期无法预测,所以根据数据有啥列就使用啥列,这是最方便的点),变成表格,方面了后续…

电脑开不了机怎么办?三招帮你成功解决!

电脑是我们日常工作和生活的重要工具,但有时候它们也会出现开机问题。当电脑无法启动时,可能会让人感到焦虑,电脑开不了机怎么办?不必担心,通常有多种方法可以解决这些问题。本文将介绍三种常见的方法,以帮…

【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘

随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进我们的生活。在教育领域,VR技术的应用也日益广泛,为学生提供了更加生动、直观的学习体验。本文将以利用VR开展太空探险学习为主题,探讨如何将这一先进技术…

提升办公效率,畅享多功能办公笔记软件Notion for Mac

在现代办公环境中,高效的笔记软件对于提高工作效率至关重要。而Notion for Mac作为一款全能的办公笔记软件,将成为你事业成功的得力助手。 Notion for Mac以其多功能和灵活性而脱颖而出。无论你是需要记录会议笔记、管理项目任务、制定流程指南&#xf…

基于springboot实现冬奥会科普平台系统【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生&…

linux备份系统盘

免安装linux 系统 可以用来, 急救 https://www.linuxliteos.com/download.php 查看 进程 io 情况 # 查看 进程 id ps -aux | grep rsync | grep -v grep# 查看 进程 打开的 文件 描述符 lsof -p id# 查看 进程 io 性能 iostat -xm 1将 块设备 压缩至 文件 To save space…

图像的傅里叶变换

目录 ​编辑 傅里叶基础 傅里叶基础numpy实现 逆傅里叶numpy实现 频域的高通滤波 傅里叶OpenCV实现 傅里叶OpenCV逆变换实现 频域的低通滤波 傅里叶变换有什么应用场景 傅里叶变换matlab实现 傅里叶基础 法国数学家吉恩巴普提斯特约瑟夫傅里叶被世人铭记的最大的贡献…

llvm源码windows编译

1.克隆llvm源码: git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git 2.创建build文件夹并生成makefile 生成前置条件: cmake ,ninja,python3要先安装 cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Release 生成成功 3.编译 进…

图论 2023.11.20

次短路 P2829 大逃离 题意&#xff1a;给定一个无向图&#xff0c;入口1&#xff0c;出口n,求第二短路的值 一个节点所直接连接的地方小于k个&#xff08;起点和终点除外&#xff09;&#xff0c;那么他就不敢进去。 n<5000&#xff0c;m<100000 思路&#xff1a;次短路…

Pytorch np.arange函数

一、np.arange函数 NumPy中的arange函数是一种类似于Python内置的range函数的函数&#xff0c;不过arange函数返回的是一个数组&#xff0c;而不是列表。在NumPy中非常常用的函数之一。 import numpy as np arr np.arange(5) print(arr)输出结果为&#xff1a;[0 1 2 3 4] …

初刷leetcode题目(7)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

sql添加索引

1.基础使用 1.普通索引 添加INDEX ALTER TABLE table_name ADD INDEX index_name ( column )下面演示下给user表的name字段添加一个索引2.主键索引 添加PRIMARY KEY ALTER TABLE table_name ADD PRIMARY KEY ( column )3.唯一索引 添加UNIQUE ALTER TABLE table_name ADD UNIQ…

【书籍篇】Git 学习指南(一)基础概念及入门

Git 学习指南 第一部分&#xff08;一&#xff09;基础概念及入门 一. 基本概念1.1 分布式版本控制1.1.1 集中式版本控制系统1.1.2 分布式版本控制系统1.1.3 特型版本库 1.2 版本库&#xff0c;分布式工作的基础所在1.2.1 散列值 1.3 分支的创建与合并1.3.1 分支的其他操作 二.…

UE 调整材质UV贴图长宽比例

首先&#xff0c;为什么要先减去0.5呢&#xff0c;因为缩放的贴图中心在0,0原点&#xff0c;以这个点缩放效果是这样&#xff1a; 它缩放的图案不会在正中间&#xff0c;因为是以0,0点进行缩放的 以这个图的箭头去缩放图片的&#xff0c;所以不能使得缩放后的图片放在正中心 那…

【机器学习】038_梯度消失、梯度爆炸

一、原因 神经网络梯度 假设现在有一个 层的神经网络&#xff0c;每层的输出为一个对输入作 变换的函数结果 用 来表示第 层的输出&#xff0c;那么有下列公式&#xff1a; 链式法则计算损失 关于某一层某个参数 的梯度&#xff1a; 注意到&#xff0c; 为向量&am…

NX二次开发UF_CAM_ask_post_template_name 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 UF_CAM_ask_post_template_name Defined in: uf_cam.h int UF_CAM_ask_post_template_name(const char * * post_template_filename ) overview 概述 This function provides the name of the file…