【SpringCloud】(一文通)SpringCloud 环境和工程搭建

news2024/11/28 16:45:26

目 录

  • 一. 开发环境安装
  • 二. 案例介绍
    • 2.1 需求
    • 2.2 服务拆分
  • 三. 数据准备
  • 四. 工程搭建
    • 4.1 构建父子工程
      • 4.1.1 创建父工程
      • 4.1.2 创建子项目-订单服务
      • 4.1.3 创建子项目-商品服务
    • 4.2 完善订单服务
      • 4.2.1 完善启动类, 配置文件
      • 4.2.2 业务代码
      • 4.2.3 测试
    • 4.3 完善商品服务
      • 4.3.1 完善启动类, 配置文件
      • 4.3.2 业务代码
      • 4.3.3 测试
    • 4.4 远程调用
      • 4.4.1 需求
      • 4.4.2 实现
      • 4.4.3 测试
  • 五. RestTemplate

一. 开发环境安装

  • JDK17安装
  • MySQL安装

二. 案例介绍

2.1 需求

实现⼀个电商平台,⼀个电商平台包含的内容⾮常多, 以京东为例, 仅从首页上就可以看到巨多的功能

我们该如何实现呢? 如果把这些功能全部写在⼀个服务里, 这个服务将是巨大的.
巨多的会员, 巨大的流量, 微服务架构是最好的选择.
微服务应用开发的第⼀步, 就是服务拆分. 拆分后才能进行"各自开发"

2.2 服务拆分

服务拆分原则

微服务并不是越小越好, 服务越小, 微服务架构的优点和缺点都会越来越明显.

服务越小, 微服务的独立性就会越来越⾼, 但同时, 微服务的数量也会越多, 管理这些微服务的难度也会提高. 所以服务拆分也要考虑场景.

拆分微服务—般遵循如下原则:

1. 单⼀职责原则

单⼀职责原则原本是面向对象设计中的⼀个基本原则, 它指的是⼀个类应该专注于单⼀功能. 不要存在多于一个导致类变更的原因.

2. 服务自治

服务自治是指每个微服务都应该具备高度自治的能力, 即每个服务要能做到独立开发, 独立测试, 独立构建, 独立部署, 独立运行

3. 单向依赖

微服务之间需要做到单向依赖, 严禁循环依赖, 双向依赖
循环依赖: A -> B -> C ->A
双向依赖: A -> B, B -> A


代码演示前提:

根据服务的单⼀职责原则, 我们把服务进行拆分为: 订单服务, 商品服务

  • 订单服务: 提供订单ID, 获取订单详细信息
  • 商品服务: 根据商品ID, 返回商品详细信息.

三. 数据准备

根据服务自治原则, 每个服务都应有自己独立的数据库

订单服务:

1 -- 建库
2 create database if not exists cloud_order charset utf8mb4;
3
4 -- 订单表
5 DROP TABLE IF EXISTS order_detail;
6 CREATE TABLE order_detail (
7 `id` INT NOT NULL AUTO_INCREMENT COMMENT '订单id',
8 `user_id` BIGINT ( 20 ) NOT NULL COMMENT '⽤⼾ID',
9 `product_id` BIGINT ( 20 ) NULL COMMENT '产品id',
10 `num` INT ( 10 ) NULL DEFAULT 0 COMMENT '下单数量',
11 `price` BIGINT ( 20 ) NOT NULL COMMENT '实付款',
12 `delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,
13 `create_time` DATETIME DEFAULT now(),
14 `update_time` DATETIME DEFAULT now(),
15 PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARACTER
16 SET = utf8mb4 COMMENT = '订单表';
17
18 -- 数据初始化
19 insert into order_detail (user_id,product_id,num,price)
20 values
21 (2001, 1001,1,99), (2002, 1002,1,30), (2001, 1003,1,40),
22 (2003, 1004,3,58), (2004, 1005,7,85), (2005, 1006,7,94);
23 create database if not exists cloud_product charset utf8mb4;
 -- 产品表
24 DROP TABLE IF EXISTS product_detail;
25 CREATE TABLE product_detail (
26 `id` INT NOT NULL AUTO_INCREMENT COMMENT '产品id',
27 `product_name` varchar ( 128 ) NULL COMMENT '产品名称',
28 `product_price` BIGINT ( 20 ) NOT NULL COMMENT '产品价格',
29 `state` TINYINT ( 4 ) NULL DEFAULT 0 COMMENT '产品状态 0-有效 1-下架',
30 `create_time` DATETIME DEFAULT now(),
31 `update_time` DATETIME DEFAULT now(),
32 PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARACTER
33 SET = utf8mb4 COMMENT = '产品表';
34
35 -- 数据初始化
36 insert into product_detail (id, product_name,product_price,state)
37 values
38 (1001,"T恤", 101, 0), (1002, "短袖",30, 0), (1003, "短裤",44, 0), 
39 (1004, "卫⾐",58, 0), (1005, "⻢甲",98, 0),(1006,"⽻绒服", 101, 0), 
40 (1007, "冲锋⾐",30, 0), (1008, "袜⼦",44, 0), (1009, "鞋⼦",58, 0),
41 (10010, "⽑⾐",98, 0)

四. 工程搭建

4.1 构建父子工程

4.1.1 创建父工程

  1. 创建⼀个空的 Maven 项目, 删除所有代码, 只保留 pom.xml

在这里插入图片描述

目录结构:

在这里插入图片描述

  1. 完善 pom 文件

使用 properties 来进行版本号的统⼀管理, 使用 dependencyManagement 来管理依赖, 声明父工程的打包方式为 pom

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 		   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 		   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 	<modelVersion>4.0.0</modelVersion>
6
7 	<groupId>org.example</groupId>
8 	<artifactId>spring-cloud-demo</artifactId>
9 	<packaging>pom</packaging>
10 	<version>1.0-SNAPSHOT</version>
11
12 	<parent>
13 		<groupId>org.springframework.boot</groupId>
14 		<artifactId>spring-boot-starter-parent</artifactId>
15 		<version>3.1.6</version>
16 		<relativePath/> <!-- lookup parent from repository -->
17 	</parent>
18 	<properties>
19 		<maven.compiler.source>17</maven.compiler.source>
20 		<maven.compiler.target>17</maven.compiler.target>
21 		<java.version>17</java.version>
22 		<mybatis.version>3.0.3</mybatis.version>
23 		<mysql.version>8.0.33</mysql.version>
24 		<spring-cloud.version>2022.0.3</spring-cloud.version>
25 	</properties>
26
27 	<dependencies>
28 		<dependency>
29 		<groupId>org.projectlombok</groupId>
30 		<artifactId>lombok</artifactId>
31 		<optional>true</optional>
32 		</dependency>
33 	</dependencies>
34
35 	<dependencyManagement>
36 		<dependencies>
37 			<dependency>
38 				<groupId>org.springframework.cloud</groupId>
39 				<artifactId>spring-cloud-dependencies</artifactId>
40 				<version>${spring-cloud.version}</version>
41 				<type>pom</type>
42 				<scope>import</scope>
43 			</dependency>
44 			<dependency>
45 				<groupId>org.mybatis.spring.boot</groupId>
46 				<artifactId>mybatis-spring-boot-starter</artifactId>
47 				<version>${mybatis.version}</version>
48 			</dependency>
49 			<dependency>
50 				<groupId>com.mysql</groupId>
51 				<artifactId>mysql-connector-j</artifactId>
52 				<version>${mysql.version}</version>
53 			</dependency>
54 			<dependency>
55 				<groupId>org.mybatis.spring.boot</groupId>
56 				<artifactId>mybatis-spring-boot-starter-test</artifactId>
57 				<version>${mybatis.version}</version>
58 				<scope>test</scope>
59 			</dependency>
60 		</dependencies>
61 	</dependencyManagement>
62 </project>

DependencyManagement 和 Dependencies

  1. dependencies :将所依赖的 jar 直接加到项目中. 子项目也会继承该依赖.
  2. dependencyManagement :只是声明依赖, 并不实现Jar包引入. 如果子项目需要用到相关依赖,需要显式声明. 如果子项目没有指定具体版本, 会从父项目中读取 version. 如果子项目中指定了版本号,就会使用子项目中指定的 jar 版本. 此外父工程的打包方式应该是 pom,不是 jar, 这里需要手动使用 packaging 来声明.

SpringBoot 实现依赖jar包版本的管理, 也是这种方式
在这里插入图片描述
 
依赖 Jar 的版本判断
 

1 <dependencies>
2 	<dependency>
3 		<groupId>org.projectlombok</groupId>
4 		<artifactId>lombok</artifactId>
5 		<optional>true</optional>
6	</dependency>
7 </dependencies>
8
9 <dependencyManagement>
10 	<dependencies>
11 		<dependency>
12 			<groupId>com.mysql</groupId>
13 			<artifactId>mysql-connector-j</artifactId>
14 			<version>${mysql.version}</version>
15 		</dependency>
16 	</dependencies>
17 </dependencyManagement>

上述代码中, lombok 会被直接引入到当前项目以及子项目中, mysql-connector-j 不会实际引入jar,子项目继承时必须显式声明.

Spring Cloud版本

Spring Cloud 是基于 SpringBoot 搭建的, 所以Spring Cloud 版本与SpringBoot 版本有关

在这里插入图片描述

4.1.2 创建子项目-订单服务

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

声明项目依赖 和 项目构建插件

1 <dependencies>
2 	<dependency>
3 		<groupId>org.springframework.boot</groupId>
4 		<artifactId>spring-boot-starter-web</artifactId>
5 	</dependency>
6 	<dependency>
7 		<groupId>com.mysql</groupId>
8 		<artifactId>mysql-connector-j</artifactId>
9 		</dependency>
10 <!--mybatis-->
11 	<dependency>
12 		<groupId>org.mybatis.spring.boot</groupId>
13 		<artifactId>mybatis-spring-boot-starter</artifactId>
14 	</dependency>
15 </dependencies>
16
17 <build>
18 	<plugins>
19 		<plugin>
20 			<groupId>org.springframework.boot</groupId>
21 			<artifactId>spring-boot-maven-plugin</artifactId>
22 		</plugin>
23 	</plugins>
24 </build>

4.1.3 创建子项目-商品服务

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

声明项目依赖 和 项目构建插件

1 <dependencies>
2 	<dependency>
3 		<groupId>org.springframework.boot</groupId>
4 		<artifactId>spring-boot-starter-web</artifactId>
5 	</dependency>
6 	<dependency>
7 		<groupId>com.mysql</groupId>
8 		<artifactId>mysql-connector-j</artifactId>
9 	</dependency>
10 <!--mybatis-->
11 	<dependency>
12 		<groupId>org.mybatis.spring.boot</groupId>
13 		<artifactId>mybatis-spring-boot-starter</artifactId>
14 	</dependency>
15 </dependencies>
16
17 <build>
18 	<plugins>
19 		<plugin>
20 			<groupId>org.springframework.boot</groupId>
21 			<artifactId>spring-boot-maven-plugin</artifactId>
22 		</plugin>
23 	</plugins>
24 </build>

4.2 完善订单服务

4.2.1 完善启动类, 配置文件

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

配置文件

server:
	port: 8080
spring:
	datasource:
		url: jdbc:mysql://127.0.0.1:3306/cloud_order?
characterEncoding=utf8&useSSL=false
	username: root
	password: root
	driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
	configuration: # 配置打印 MyBatis⽇志
		log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
		map-underscore-to-camel-case: true #配置驼峰⾃动转换

4.2.2 业务代码

  1. 实体类
import lombok.Data;
import java.util.Date;
@Data
public class OrderInfo {
	private Integer id;
	private Integer userId;
	private Integer productId;
	private Integer num;
	private Integer price;
	private Integer deleteFlag;
	private Date createTime;
	private Date updateTime;
}
  1. Controller
@RequestMapping("/order")
@RestController
public class OrderController {
	@Autowired
	private OrderService orderService;
	@RequestMapping("/{orderId}")
	public OrderInfo getOrderById(@PathVariable("orderId") Integer orderId){
		return orderService.selectOrderById(orderId);
	}
}
  1. Service
import com.bite.order.mapper.OrderMapper;
import com.bite.order.model.OrderInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class OrderService {
	@Autowired
	private OrderMapper orderMapper;
	public OrderInfo selectOrderById(Integer orderId) {
		OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
		return orderInfo;
	}
}
  1. Mapper
import com.bite.order.model.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface OrderMapper {
	@Select("select * from order_detail where id=#{orderId}")
	OrderInfo selectOrderById(Integer orderId);
}

4.2.3 测试

访问 url: http://127.0.0.1:8080/order/1

页面正常返回结果:

在这里插入图片描述

4.3 完善商品服务

4.3.1 完善启动类, 配置文件

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

配置文件

server:
	port: 9090
spring:
	datasource:
		url: jdbc:mysql://127.0.0.1:3306/cloud_product?
characterEncoding=utf8&useSSL=false
	username: root
	password: root
	driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
	configuration: # 配置打印 MyBatis⽇志
		log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
		map-underscore-to-camel-case: true #配置驼峰⾃动转换

后⾯需要多个服务⼀起启动, 所以设置为不同的端口号

4.3.2 业务代码

  1. 实体类
import lombok.Data;
import java.util.Date;

@Data
public class ProductInfo {
	private Integer id;
	private String productName;
	private Integer productPrice;
	private Integer state;
	private Date createTime;
	private Date updateTime;
}
  1. Controller
@RequestMapping("/product")
@RestController
public class ProductController {
	@Autowired
	private ProductService productService;
	
	@RequestMapping("/{productId}")
	public ProductInfo getProductById(@PathVariable("productId") Integer productId){
			System.out.println("收到请求,Id:"+productId);
			return productService.selectProductById(productId);
		}
}
  1. Service
@Service
public class ProductService {
	@Autowired
	private ProductMapper productMapper;
	
	public ProductInfo selectProductById(Integer id){
		return productMapper.selectProductById(id);
	}
}
  1. Mapper
@Mapper
public interface ProductMapper {
	@Select("select * from product_detail where id=#{id}")
	ProductInfo selectProductById(Integer id);
}

4.3.3 测试

访问 url: http://127.0.0.1:9090/product/1001

页面正常返回结果:

在这里插入图片描述

4.4 远程调用

4.4.1 需求

根据订单查询订单信息时, 根据订单里产品 ID, 获取产品的详细信息.

在这里插入图片描述

4.4.2 实现

实现思路: order-service 服务向 product-service 服务发送⼀个 http 请求, 把得到的返回结果, 和订单结果融合在⼀起, 返回给调用方

实现方式: 采用 Spring 提供的 RestTemplate

实现http请求的⽅式, 有很多, 可参考: https://zhuanlan.zhihu.com/p/670101467 点击跳转

  1. 定义 RestTemplate
@Configuration
public class BeanConfig {
	@Bean
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}
  1. 修改 order-service 中的 OrderService
@Service
public class OrderService {
	@Autowired
	private OrderMapper orderMapper;
	
	@Autowired
	private RestTemplate restTemplate;
	
	public OrderInfo selectOrderById(Integer orderId) {
		OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
		String url = "http://127.0.0.1:9090/product/"+ orderInfo.getProductId();
		ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
		orderInfo.setProductInfo(productInfo);
		return orderInfo;
	}
}

RestTemplate 详细使用可参考: https://www.cnblogs.com/54chensongxia/p/11414923.html 点击跳转

4.4.3 测试

访问 url: http://127.0.0.1:8080/order/1

页面返回结果:

在这里插入图片描述

五. RestTemplate

RestTemplate 是从 Spring3.0 开始支持的⼀个 HTTP 请求工具, 它是⼀个同步的 REST API 客户端, 提供了常见的REST请求方案的模版.

什么是REST?

REST(Representational State Transfer), 表现层资源状态转移.
REST 是由 HTTP 的主要设计者Roy Fielding 博士在2000年他的博士论文中提出来的⼀种软件架构风格

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

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

相关文章

Cesium实现单个无人机飞行

通过一组坐标&#xff0c;实现平滑的无人机飞行效果 测试步骤&#xff1a; 1、手动填写坐标并记录坐标(可通过点击球面查看坐标信息) 2、点击初始化&#xff0c;载入相应的坐标信息 3、点击漫游&#xff0c;镜头会平滑演进 低配置云服务器&#xff0c;首次加载速度较慢&…

设备状态图表-甘特图

1.背景&#xff1a;设备状态监控图表&#xff0c;监控不同状态的时间段&#xff0c;可以使用甘特图来展示效果 鼠标经过时的数据提示框 2、代码实现 <template><divref"ganttChartRefs":style"{ height: 6.2rem, width: 100% }"class"bg…

利用ai写作软件,一键智能改写文案很简单

在当今快节奏的时代&#xff0c;科技的发展日新月异&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐融入到我们生活的各个方面。其中&#xff0c;AI写作工具的出现为文案创作带来了极大的便利&#xff0c;让一键智能改写文案变得简单而高效。 AI写作工具利用先进的算法…

项目技巧1

目录 创建项目工程的技巧 示例&#xff1a;创建父工程 第一步&#xff1a;初始化maven项目 第二步&#xff1a;使用标签 抽取依赖的资源版本号&#xff0c;方便后续调整 第三步&#xff1a;配置父工程锁定的版本&#xff0c;使用 该标签的作用&#xff1a;锁定资源的版本号&…

初探Raft算法

在分布式系统有一个经典的CAP理论&#xff0c;C&#xff1a;一致性&#xff0c;即集群中所有节点都应该是一致的。A&#xff1a;可用性&#xff0c;集群一直处于可用状态。P&#xff1a;分区容错性&#xff1a;即复制所有数据到集群的所有节点&#xff0c;保证即使出现网络分区…

TQRFSOC开发板47DR,LMK04832更新配置

在利用RFSOC开发板进行项目开发时&#xff0c;面对多样化的时钟需求&#xff0c;巧妙地配置LMK04832时钟管理芯片以输出精确的时钟信号显得尤为重要。本期内容将讲解如何通过ZYNQ更新LMK04832的配置&#xff0c;以满足您的特定时钟需求。 每次配置成功后&#xff0c;配置文件都…

电路笔记(PCB):JLC PCB布局和走线基础教程笔记

对立创EDA 四层板PCB设计保姆级教程的笔记看完才发现是个虚假的教程&#xff0c;除了没教四层板咋画其它教了&#xff08;中间的两层全是GND的作用&#xff09; PCB布局 转换原理图 使用USB模块&#xff08;3.0集线器&#xff09;中的原理图。设计- - -》更新/转换原理图到P…

CSP内容安全策略

目录 CSP内容安全策略 一、引入 二、CSP内容安全策略 1、通过 HTTP 响应头信息的 Content-Security-Policy 的字段 2、通过网页的 meta 标签 3、在security的read.php页面&#xff0c;增加以下响应头 4、report-uri安全报告 5、其他安全配置 6、Web服务器全局配置 三…

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列&#xff0c;每个数字占据20*20个像素点&#xff0c;可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…

8月20日

思维导图 面试题整理&#xff1a; 数据结构中顺序表和链表的区别? 顺序表&#xff1a; 1、存储方式&#xff1a;顺序表是一系列连续的内存空间&#xff0c;每个元素的地址可以通过索引计算出&#xff1b; 2、访问速度&#xff1a;由于不需要遍历查找&#xff0c;访问速度较…

一路坎坷-Mac下安装Python3、环境变量配置、安装jupyter notebook

遇到很多问题最终解决--Mac下安装Python3、环境变量配置、安装jupyter notebook 下载-安装python打开Mac终端-安装Jupyter给python3配置环境变量给jupyter配置环境变量配置遇到的问题 首先说一下我是先下载python3.8-然后安装&#xff1b;再在苹果电脑的终端下载Jupyter的&…

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S&#xff1a;客户端/服务器端&#xff0c;所有网络应用都是基于客户端服务器端进行的&#xff0c;Java写的是服务端&#xff0c;客户端是一个软件&#xff0c;服务端也是一个软件&#xff0c;两个软件之间交互&#xff1b;&#xff08;只能连接对应的服务器&#xff09; B/…

使用 Arch Linux 几个月有感 | 为什么我选择 Arch Linux ,Arch 的优缺点有什么 | 一些Linux发行版推荐

&#xff08;终端是 Yakuake &#xff0c;KDE 自带&#xff09; 一点碎碎念&#xff0c;可以跳过不看 几年前从 CentOS 接触的 Linux &#xff0c;试图搭建一个KMS服务器 但是失败了 &#xff0c;后来装过 Ubuntu Debian deepin Kali Kubuntu Manjaro&#xff0c;踩一路坑最后…

线性数据结构的基本概念(数组,链表,栈,队列)

数组 数组由相同类型的元素组成&#xff0c;使用一块连续的内存来存储。 数组的特点是&#xff1a; 1.利用索引进行访问 2.容量固定 3.使用一块连续的内存来存储 各种操作的时间复杂度&#xff1a; 查找/修改&#xff1a;O&#xff08;1&#xff09;//访问特定位置的元素 插入…

day07_算法训练

案例零&#xff1a;整数反转&#xff08;大整数算法&#xff09; 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 暂时不用考虑数据太大的问题&#xff0c;把本题的核心思路写出来即可 比如&#xff1a; ​ 输入&#xff1a;x 123 ​ 输出…

一分钟带你了解叉车!

一、叉车的概念 叉车是指对整件托盘货物或大件桶装进行装卸、堆垛和短距离运输作业的各种搬运车辆。叉车是实现整件货物和散装物料机械化装卸、堆垛和短途运输的高效率工作车辆。 叉车常用于仓储大型物件的运输、车站、码头、机场、仓库、工地、货厂和工矿企业&#xff0c;是…

【案例47】enq: TX - row lock contention事件导致制单卡死

问题现象 制单时&#xff0c;选择公司就会卡住不动&#xff0c;其他节点正常。 问题分析 通过nmc排查&#xff0c;发现后台有很多制单线程卡住&#xff0c;时间较久&#xff0c;并且当前的事件都是在数据库执行sql层面。并且每条线程的卡住语句都为update语句&#xff0c;怀…

Openstack 与 Ceph集群搭建(中): Ceph部署

文章目录 一、部署前说明1. ceph 版本选择依据2. ceph网络要求3. 硬件要求 二、部署架构三、部署过程1. 通用步骤2. 部署管理节点创建账号安装Cephadm运行bootstrap 3. 登录Ceph web4. 将其他节点加入集群同步ceph key安装ceph CLI命令行添加主机节点到集群添加OSD节点将监控节…

[数据集][目标检测]机械常用工具检测数据集VOC+YOLO格式4713张8类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4713 标注数量(xml文件个数)&#xff1a;4713 标注数量(txt文件个数)&#xff1a;4713 标注…

配置typora上传图片到Chevereto图床

目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载&#xff0c;会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装&#xff08;本文已windows系统为例&#xff09; 二、配置PicGo 点击插件设…