快捷搜索:

从零开始搭建SpringCloud微服务框架(一)————基础框架搭建

前言:

最近一直在学习SpringCloud微服务框架,公司使用的也是这一套框架,所以想总结一下自己的技术,就当做沉淀吧。

目前的想法是先搭建后台框架,集成GetWay+OpenFeign+Eureka+Hystrix等等...,一步一步拓展吧,写博文也是一件值得坚持的事情。

ps:

环境准备:

SpringCloud: Hoxton.SR6

SpringBoot: 2.2.6.RELEASE

Idea: IntelliJ IDEA 2020.3.1

jdk: 1.8

maven: 3.6.0

搭建出来的效果大致如下:Maven聚合工程

一:创建父工程

先自己新建一个文件夹,将项目放在这个文件夹下面:

Idea打开这个目录:

右键,新建项目,new,project

选择Maven项目,java Jdk1.8,一路next(注意:有些人喜欢用Spring Initializr创建,其实两没什么区别,后者无非就是多了一些初始化引用的依赖,Maven更纯净,按需引用)

然后输入项目相关信息

然后我们再新建子工程服务:springcloud_eurekaserver

此时,在父工程里面多了一个modules,这里面包含了所有的子项目

父工程引入相关依赖:

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

    <groupId>com.springcloud</groupId>
    <artifactId>springcloud_parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>springcloud_eurekaserver</module>
        <module>springcloud_auth</module>
    </modules>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>


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

    <!--SpringCloud 管理-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--依赖-->
    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!--hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <!--huTool工具-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.7</version>
        </dependency>


        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
            <scope>provided</scope>
        </dependency>

        <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>
        <!--swagger2 end-->

        <!--redis start-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!--redis end-->


        <!-- pageHelper分页-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>

        <!--aop-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests> <!--默认关掉单元测试 -->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
集成Eureka服务注册中心

在刚才的springcloud_eurekaserver子项目中,pom引入Eureka依赖:

<dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

新建包,启动类:

package com.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringCloudApplication
@EnableEurekaServer
//排除此类的autoconfig
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

配置文件,配置Eureka相关信息:

server:
  port: 8001
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    ### 实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true
    registerWithEureka: false
    ### 此客户端是否获取eureka服务器注册表上的注册信息,默认为true
    fetchRegistry: false
    ### 注册到的注册中心地址
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    ### 测试时候关闭自我保护机制,保证不可用服务能及时剔除,生产环境建议开启
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 2000 #间隔2秒剔除一次

启动项目:

查看Eureka服务注册界面:

第一段落到此结束,我们一起搭建了一个聚合工程,引入了SpringCloud相关依赖,且启动了一个Eureka服务注册中心服务,接下来会陆续集成一些其它的服务。

项目地址:

希望能留下您宝贵的意见

经验分享 程序员 微信小程序 职场和发展