SpringCloud 项目基础工程搭建 【SpringCloud系列1】

2,204 阅读3分钟

SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发

在这里插入图片描述

在这里插入图片描述

1 Idea 创建 Maven 项目

在这里插入图片描述

创建好后,我们反多余的文件夹删除,留下空的 maven 工程 在这里插入图片描述 对应的pom.xml 中只留下基础的配置

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.biglead</groupId>
  <artifactId>biglead-api</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.4</version>
    <relativePath/>
  </parent>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java-version>17</java-version>
    <maven.compiler.target>17</maven.compiler.target>
    <maven.compiler.source>17</maven.compiler.source>
  </properties>

</project>

2 SpringCloud 版本

Spring Cloud 官方

在这里插入图片描述

  • GA:General Availability,正式发布的版本,官方推荐使用此版本。在国外都是用GA来说明release版本的。
  • PRE::预览版,内部测试版,主要是给开发人员和测试人员测试和找BUG用的,不建议使用。
  • SNAPSHOT:快照版,可以稳定使用,且仍在继续改进版本。
  • SR+数字:该种形式也是正式发布的稳定版本,表示在是大版本的第几个正式版本。 在这里插入图片描述

本系列使用 2020.0.2 版本 。 导入基本使用的依赖如下:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.biglead</groupId>
    <artifactId>biglead-api</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java-version>17</java-version>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.source>17</maven.compiler.source>

        <spring-boot.version>2.4.4</spring-boot.version>
        <spring-cloud.version>2020.0.2</spring-cloud.version>
        <spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
        <mysql.version>5.1.47</mysql.version>
        <mybatis.version>2.1.1</mybatis.version>
        <amqp.version>2.4.4</amqp.version>
        <elasticsearch.version>7.12.1</elasticsearch.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>
            <!--   springboot web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

2.1 dependencyManagement 标签

在父级的 pom 中的 dependencyManagement 标签 ,是对所依赖jar包进行声明依赖,也就是这里的声明依赖的版本,继承该父项目的子项目,不会直接引入dependencyManagement管理的jar包,在子项目中使用到对应的依赖时,可不写版本号。

3 子项目 UserService 服务创建

在这里插入图片描述 比如我这里创建的服务叫 user-service 在这里插入图片描述 点击Next创建完成后,在父工程的 pom.xml 中添加模块依赖

    
    <modules>
        <module>user-service</module>
    </modules>

在这里插入图片描述 然后整理一下刚刚创建的user-service服务的 pom文件如下:

<?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>
    <!--    依赖修改为父工程-->
    <parent>
        <artifactId>biglead-api</artifactId>
        <groupId>com.biglead</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>user-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>user-service</name>
    <description>user-service</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
                <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>![在这里插入图片描述](https://img-blog.csdnimg.cn/020b34be4b004aeaa6765dfba73bdc88.png)

            </plugin>
        </plugins>
    </build>

</project>

然后 clean 一下项目,重新加载一下 pom 依赖

在这里插入图片描述 然后修改 配置文件 application.properties 为 application.yml ,并添加基础的配置如下:

server:
  port: 8001

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/spring_cloud?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&useSSL=false
    username: testadmin
    password: qwert.12345
    driver-class-name: com.mysql.jdbc.Driver
  application:
    #对应pom中的配置的name
    name: '@project.name@'


mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
#mybatis
mybatis-plus:
  mapper-locations: classpath*:**/sqlmap/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.biglead.userservice.pojo
  configuration:
    map-underscore-to-camel-case: true
    #缓存
    cache-enabled: false
    call-setters-on-nulls: true
    #配置日志  log-impl:日志实现
    log-impl : org.apache.ibatis.logging.stdout.StdOutImpl

然后测试启动项目 在这里插入图片描述

4 用户信息查询

在这里使用 mybatis-plus 来查询数据库的用户信息,基本的集成过程可以查看这里

SpringBoot MyBatis-Plus 集成 【SpringBoot系列5】 数据库中对应的用户数据如下 在这里插入图片描述

UserController 中的接口信息配置

import com.biglead.userservice.pojo.UserInfo;
import com.biglead.userservice.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

     @Value("${server.port}")
     private String serverPort;

    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping(value = "/{id}")
    public UserInfo queryById(@PathVariable("id") Long id) {
        log.info("查询用户信息 port {}",serverPort);
        return userService.queryById(id);
    }
}

UserService.java 的定义


import com.baomidou.mybatisplus.extension.service.IService;
import com.biglead.userservice.pojo.UserInfo;

public interface UserService extends IService<UserInfo> {

    /**查询用户详情*/
    UserInfo queryById(Long id);
}

UserServiceImpl.java 的定义

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biglead.userservice.mapper.UserMapper;
import com.biglead.userservice.pojo.UserInfo;
import com.biglead.userservice.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo> implements UserService {
    /**
     * 查询用户详情
     *
     * @param id
     */
    @Override
    public UserInfo queryById(Long id) {
        return this.getById(id);
    }
}

UserMapper.java 的定义

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biglead.userservice.pojo.UserInfo;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<UserInfo> {
    

}

然后启动项目,大家可以查看一下项目的目录结构如下

在这里插入图片描述 然后在 postman 中访问 http://localhost:8001/user/1\ 在这里插入图片描述 然后也可以看到控制台日志如下: 在这里插入图片描述

5 子项目 order-service 创建

重复本文章 第三小节的创建 SpringBoot的过程,创建一个order-service服务,然后在 父项目中添加 order-service 的配置 在这里插入图片描述 然后 maven 重新 reload 一下,重复本文章 第四小节的过程 ,写一个订单服务的基本的查询,然后启动 订单服务如下 :

在这里插入图片描述 订单详情的表数据如下 在这里插入图片描述

然后 访问接口 http://{{host}}:9001/order/109 查询订单的数据如下 在这里插入图片描述


SpringCloud 微服务基本工程搭建完成 本文章是系列文章,代码过多,可以查看源码如下: gitee.com/android.lon…

有兴趣可以关注一下 公众号 biglead