从0开始搭建一个SpringCloud资源分享项目(day one)

该文介绍了如何构建一个SpringCloud项目,包括使用SpringBoot、AlibabaNacos进行服务注册与配置,通过Feign-Client进行服务请求转发,利用MySQL和Redis进行数据持久化与鉴权,以及集成ES搜索引擎和RabbitMQ进行数据同步。文章还提到了前端使用Vue,并专注于接口测试,详细阐述了项目创建、Gateway网关鉴权的步骤以及配置文件内容。
摘要由CSDN通过智能技术生成

  这里是对之前所写的一个springboot项目的拆分和丰富功能,主体结构随便画了一下

9ddbbfe05c664c39920b802a36483bc1.jpeg

网关:gateway

服务注册和配置:ailibabaNacos

服务请求转发:feign-client

数据库:mysql持久,redis鉴权与缓存

搜索功能:es搜索引擎,rabbitmq消息队列进行mysql和es的数据同步

  前端是用vue实现的,由于作者前端会的不多所以在搭建springcloud项目时注重于接口测试 ,第一天是项目的创建和gateway网关的鉴权。

目录

1.打开idea创建一个springcloud父工程

2.创建一个子项目


1.打开idea创建一个springcloud父工程

c1e1057f5de34d5eb118c82c25596367.png

 直接选择maven项目然后点击下一步

8c2a71448f6d45539cf9887aa4170380.png 项目名,工件坐标这些都可以自己设置,点击完成就行。

9bcd40e76ae44d71bfffafc02d710f09.png

  父项目的src可以删除,因为父项目的主要作用就是对整体依赖版本的管理,首先我们加入父项目对于springboot版本的管理,注意这里springboot和spring cloud版本一定要对应,不然后面项目启动不了,可以用我这里的版本也可以去官方文档看对应关系。

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

  接下来进行版本的管理和坐标的引入,可以根据自己的需要取舍依赖,dependencyManagement里的依赖就是spring cloud的依赖管理,在子项目引入的时候不需要指定版本,只要artifactId和groupId就行,另外在properties写入版本在下面使用${}引入方便管理。

    <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.SR10</spring-cloud.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <hutool.version>5.5.8</hutool.version>
        <java.version>1.8</java.version>
        <druid.version>1.1.10</druid.version>
        <fastjson.version>1.2.62</fastjson.version>
        <mybatisplus.version>3.5.1</mybatisplus.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- spring-cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.10</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <!--mybatis-plus-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatisplus.version}</version>
            </dependency>

            <!--  小而全的工具类库    -->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!--Nacos依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.创建一个子项目

  这里以gateway子项目进行示例,子项目的创建过程都一样,我们右键点击父工程,点击新建一个模块,坐标和名字一样自己设置。

c81ea1ac6f604471877547d737702ea3.png

  每创一个项目,在父项目会生成一个module

4447046c104c4cd9b1c285b1c3378661.png

   创建好子项目之后我们同样引入依赖,公用包是创建来用于存放一些返回类之类的通用类,通过自己的坐标可引入依赖,减少重复代码,feign-client我们也会使用这种方式调用。

    <dependencies>
        <!--nacos服务注册发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--网关gateway依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--公用包-->
        <dependency>
            <groupId>com.ityz</groupId>
            <artifactId>love-common</artifactId>
            <version>1.0</version>
        </dependency>
        </dependency>
        <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <!--            <version>2.3.7.RELEASE</version>-->
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.2</version>
        </dependency>
    </dependencies>

  依赖导入之后我们给子项目添加包和启动类已经yml配置文件

83591318af54446ab5ae63e53d29f216.png

  springboot启动类 :

package com.ityz.gateway;

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

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

yml配置文件:这里还包含了将服务注册到nacos,需要开启nacos服务才行,如果不需要就注释掉配置,后面的是gateway路由转发断言配置,因为后面所有请求都是访问网关端口,网关进行转发和负载均衡。

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userService # 路由的目标地址,lb表示负载均衡
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
        - id: file-service
          uri: lb://fileService
          predicates:
            - Path=/file/**
#      default-filters: #默认过滤器,会对所有路由请求生效
#        - AddRequestHeader=Truth,ityz is freaking awesome! #设置请求头
      globalcors:
        add-to-simple-url-handler-mapping: true  #解决options请求被拦截问题
        cors-configurations:
          '[/**]':
            allowedOrigins: #允许哪些网站的跨域请求
              - "http://localhost:8090"
              - "http://www.leyou.com"
            allowedMethods: #允许跨域的Ajax请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" #允许在请求头中携带的信息
            allowedCredentials: true #是否允许携带cookie
            maxAge: 360000 #本次跨域的有效期
  redis:
    #    host: localhost
    host: 8.130.40.99
    port: 6379
    #    password: Zxy020729
    jedis:
      pool:
        max-active: 8
    database: 0

 总体来说需要注意的就是boot和cloud版本对应,下一部分分享如何用token和redis做鉴权。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值