SpringBoot与SpringCloud的关系
- Spring Boot主内,能够快速搭建,快速开发单个微服务,搞定了数据层访问、RESTful 接口、日志组件、内置容器等等基础功能
- Spring Cloud主外,轻松实现服务注册与发现、负载均衡、熔断降级、配置管理等
- Spring Boot是SpringCloud的基础,两者分工合作、合二为一,构建了微服务领域的全家桶解决方案
简单来理解的话,有了SpringBoot你可以很方便的写网站或是接口,SpringCloud提供的各种技术服务则是让你网站运行的更稳定,与SpringBoot的写法一致,只是思想变了,从MVC -> 前后分离 -> 微服务。只是把原来的很多服务都写在一个单体项目里面差分成不同模块,每个模块都是一个独立的项目。
创建一个父工程
创建一个Maven工程
删除无用目录
最终的结构就是这样
把我提供的父工程的pom.xml粘贴进去
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>user-service</module>
<module>orders-service</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.cloud</groupId>
<artifactId>SpringCloud-Demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--父工程需要设置打包方式为pom-->
<packaging>pom</packaging>
<!--设置具体版本号-->
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF- 8</project.reporting.outputEncoding>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<lombok.version>1.16.22</lombok.version>
<spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springcloud的版本管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springcloudalibaba的版本管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 子工程共享依赖-->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建user-service子工程
这里的子工程可以理解为你要拆分的服务,比如你们业务很复杂,需要把用户和订单模块独立出来,那么这个子工程就可以是user-service针对用户的服务,如注册、登录什么的,然后orders-service则是针对订单的,生成订单,查看订单啥的。
创建user-service
最后按照我们创建SpringBoot项目一样的操作创建好相应的结构就可以,同时把orders-service也创建好
编写业务代码
编写user-service业务代码
根据需要调整我们的项目结构
UserController代码
package com.cloud.user.controller;
import com.cloud.user.entity.User;
import com.cloud.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 小彭同学
* @email 1043874660@qq.com
* @time 2024/1/4
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/get/{id}")
public User get(@PathVariable Integer id){
return userService.getById(id);
}
}
User实体代码
package com.cloud.user.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* @author 小彭同学
* @email 1043874660@qq.com
* @time 2024/1/3
*/
@Data
@TableName("user")
public class User implements Serializable {
private String id;
private String name;
private String username;
private String password;
private String sex;
private String age;
private String createTime;
}
UserMapper代码
package com.cloud.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cloud.user.entity.User;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 小彭同学
* @email 1043874660@qq.com
* @time 2024/1/3
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
UserService代码
package com.cloud.user.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.user.entity.User;
/**
* @author 小彭同学
* @email 1043874660@qq.com
* @time 2024/1/3
*/
public interface UserService extends IService<User> {
}
UserServiceImpl实现代码
package com.cloud.user.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.user.entity.User;
import com.cloud.user.mapper.UserMapper;
import com.cloud.user.service.UserService;
import org.springframework.stereotype.Service;
/**
* @author 小彭同学
* @email 1043874660@qq.com
* @time 2024/1/3
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
application.yml代码
server:
port: 8080
http:
encoding:
charset: UTF-8
spring:
application:
name: user-service
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-cloud-user?useUnicode=true&useSSL=false&characterEncoding=utf8
username: root
password: root
pom.xml依赖
<dependencies>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>Cloud-Demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
到此我们的微服务项目就算是搭建完成了,关注我后面更新如何将他们串联起来。
数据库相关内容
spring-cloud-user库
user表
/*
Navicat Premium Data Transfer
Source Server : 127.0.0.1
Source Server Type : MySQL
Source Server Version : 50740
Source Host : localhost:3306
Source Schema : spring-cloud-user
Target Server Type : MySQL
Target Server Version : 50740
File Encoding : 65001
Date: 04/01/2024 15:02:34
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '无名氏' COMMENT '项目',
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号',
`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`sex` tinyint(4) NOT NULL DEFAULT 1 COMMENT '性别',
`age` tinyint(4) NOT NULL DEFAULT 0 COMMENT '年龄',
`create_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '小黑', 'admin', '123456', 1, 13, '2024-01-03 22:46:16');
INSERT INTO `user` VALUES (2, '小黄', 'xiaohuang', '123456', 0, 13, '2024-01-03 22:46:19');
INSERT INTO `user` VALUES (3, '小兰', 'xiaolan', '123456', 0, 12, '2024-01-03 22:46:19');
INSERT INTO `user` VALUES (4, '小绿', 'xiaolv', '123456', 1, 15, '2024-01-03 22:46:12');
SET FOREIGN_KEY_CHECKS = 1;
orders表
/*
Navicat Premium Data Transfer
Source Server : 127.0.0.1
Source Server Type : MySQL
Source Server Version : 50740
Source Host : localhost:3306
Source Schema : spring-cloud-orders
Target Server Type : MySQL
Target Server Version : 50740
File Encoding : 65001
Date: 04/01/2024 15:02:41
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`ord_num` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '订单号',
`user_id` int(10) NOT NULL COMMENT '用户ID',
`goods_name` varchar(52) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品名称',
`price` decimal(10, 2) NOT NULL COMMENT '价格',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES (1, '123456', 1, '雪碧 * 1', 10.00, '2024-01-03 23:36:52');
INSERT INTO `orders` VALUES (2, '123453', 2, '雪碧 * 2', 12.00, '2024-01-03 23:36:52');
INSERT INTO `orders` VALUES (3, '123416', 1, '面包 * 1', 10.12, '2024-01-03 23:36:52');
INSERT INTO `orders` VALUES (4, '113456', 3, '可乐 * 3', 11.50, '2024-01-03 23:36:52');
SET FOREIGN_KEY_CHECKS = 1;
最后说明
orders-service需要自己手动完成哦