开课吧孤尽T31训练营学习笔记-DAY9-工程搭建填坑记

218 阅读3分钟

T31实战工程搭建

一、工程搭建思路

考虑到既要兼顾学习过程,能够体会到微服务搭建的整个过程,又要考虑到作业交付的压力。不能在无谓的用户角色菜单功能上浪费太多精力,就计划选择一个开源的低代码开发平台,包括基本的管理员功能。

1.1 基础架构选型

一开始考虑从jeecg和renren-fast中选择;

jeecg基本是一个完备的框架,微服务架构都已经完整,选择jeecg就意味着,我只需要熟悉这个框架,直接做业务开发就可以了,无法体验微服务的整个搭建过程。

renren-fast是一个单体框架,对springboot开发有一个基本的封装,而且具备用户、角色、菜单上基本功能。适合作为T31学习的基本框架。

1.2 微服务选型

技术栈和课程保持同步:

Spring Boot 2.3.2.RELEASE
Spring Cloud Hoxton.SR8
Spring Cloud Alibaba 2.2.5.RELEASE
Mybatis 3.5.4
Mybatis Plus 3.3.2
Spring Security OAuth2 2.2.4.RELEASE

二、 服务搭建过程

2.1 建立父工程t31-wuhe

五合是我们小组的名称,我们小组全程是五合1组,所以我们组的工程名字就是t31-wuhe。

父工程主要两个职责

1. 模块管理。

image.png

2. 依赖管理

依赖spring-boot-starter-parent;maven不会自动从maven远程仓库去拉取,所以会报错。可以先把这个写到依赖中,完成下载后,再这样声明。

image.png

项目中公共依赖做声明:

image.png

2.2 启动nacos

下载nacos,修改启动脚本,改成standalone模式启动:

set MODE="standalone"

直接运行启动脚本即可,启动后访问localhost:8848, 默认用户名和密码都是nacos。

2.3 构建第一个模块t31-admin

下载renren-fast,删掉.git目录,修改目录名为t31-admin:

git clone gitee.com/renrenio/re…

复制到t31-wuhe下,修改pom,

  1. 依赖于父工程

image.png

  1. 去掉父类中已经设置好依赖管理类的version。

如图,不需要再声明version:

image.png

  1. 数据初始化 将db目录中的sql导入数据,配置application.yml中的文件,连接配置好的数据库。

  2. 修改启动类注解,配置nacos服务注册中心

在启动类中添加注解:

@EnableDiscoveryClient

在配置文件中,配置nacos:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

  1. 启动服务,在nacos控制台可以看到对应的服务。

2.4 启动前端工程

首先安装node 10+, 配置npm源为taobao:

npm config set registry registry.npm.taobao.org

然后在前端工程目录下运行:

npm install npm run dev

即可看到前端页面,默认用户名密码都是admin。

2.5 api gateway

新建子模块t31-gateway

  1. pom中添加spring cloud gateway依赖

由于spring cloud gateway保持默认依赖于webflux,所以排除掉spring web image.png

  1. 同2.3中描述,注册到nacos

  2. 添加转发规则

spring:
  cloud:
    gateway:
      routes:
        - id: admin_route
          uri: lb://t31-admin
          predicates:
            - Path=/t31-admin/**
  1. 启动gateway

启动后,在nacos下可以看到两个系统注册到nacos上。

2.6 整合

前端工程通过apigateway调用

t31-ui工程的url前缀调整为apigateway的地址;

跨域问题解决

在apigateway中统一添加跨域的响应头。

@Configuration
public class T31CorsConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();

        config.setAllowCredentials(true); //可以携带cookie信息
        config.addAllowedOrigin("*"); //允许所有的请求地址 访问
        config.addAllowedHeader("*"); //允许携带所有的请求头信息
        config.addAllowedMethod("*"); //允许所有的请求方式 get post put delete option

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

去掉admin服务中的跨域拦截器。

服务搭建总结

服务搭建过程中,总会遇到各种各样的坑,仔细看异常,找到问题根源去解决,不要瞎猜,会很打击信息。