SpringCloud之通过IDEA搭建一个基础的项目

本文介绍了SpringBoot在快速开发单个微服务中的作用,以及SpringCloud如何提供服务注册、发现、负载均衡等功能,展示了如何通过父子Maven工程和模块化设计将它们结合起来,实现一个完整的微服务架构示例。
摘要由CSDN通过智能技术生成

SpringBoot与SpringCloud的关系

  1. Spring Boot主内,能够快速搭建,快速开发单个微服务,搞定了数据层访问、RESTful 接口、日志组件、内置容器等等基础功能
  2. Spring Cloud主外,轻松实现服务注册与发现、负载均衡、熔断降级、配置管理等
  3. 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需要自己手动完成哦

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建一个新的Spring Boot项目 首先,我们需要在IDEA中创建一个新的Spring Boot项目。在IDEA的欢迎页面中选择“Create New Project”,然后选择“Spring Initializr”。 在Spring Initializr页面中,我们需要填写一些项目的基本信息,包括项目名称、描述、包名、Java版本、Spring Boot版本等。在这里,我们选择使用JDK 8,Spring Boot 2.2.2版本。 2. 添加Spring Cloud依赖 在创建完项目后,我们需要添加Spring Cloud的依赖。在pom.xml文件中添加以下依赖: ``` <dependencies> <!-- Spring Cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Others --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> </dependencies> ``` 这些依赖包括了Spring Cloud Eureka、Spring Cloud Config、Spring Cloud OpenFeign、Spring Cloud Zipkin等。 3. 配置Eureka注册中心 在application.yml文件中添加以下配置: ``` spring: application: name: service-demo cloud: config: uri: http://localhost:8888 profile: dev zipkin: base-url: http://localhost:9411 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ ``` 这里我们使用了Eureka作为服务注册中心,将服务的注册地址配置为http://localhost:8761/eureka/。 4. 创建服务接口 我们创建一个简单的服务接口,用于测试Spring Cloud的服务调用功能。 ``` public interface HelloService { @GetMapping("/hello") String hello(@RequestParam("name") String name); } ``` 5. 创建服务实现 创建服务实现类并使用@FeignClient注解标记为Feign客户端。 ``` @Service @FeignClient("service-provider") public class HelloServiceImpl implements HelloService { @Override public String hello(String name) { return "Hello " + name + "!"; } } ``` 6. 启用服务发现 在应用主类上添加@EnableDiscoveryClient注解以启用服务发现。 ``` @SpringBootApplication @EnableDiscoveryClient public class ServiceConsumerApplication { public static void main(String[] args) { SpringApplication.run(ServiceConsumerApplication.class, args); } } ``` 7. 测试服务调用 在测试类中注入HelloService并进行调用测试。 ``` @RunWith(SpringRunner.class) @SpringBootTest public class HelloServiceTest { @Autowired private HelloService helloService; @Test public void testHello() { String result = helloService.hello("world"); System.out.println(result); Assert.assertEquals("Hello world!", result); } } ``` 8. 启动服务并注册到Eureka 将服务启动后,可以在Eureka的管理页面中查看到该服务的注册信息。 至此,一个简单的Spring Cloud微服务项目就已经搭建完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值