40 图|我用 M1 玩转 SpringCloud | 文末福利

2022-05-13 14:00:27 浏览数 (1)

这是悟空的第 96 篇原创文章

我的开源 Spring Cloud 项目 PassJava 一直是在 Windows 和 Ubuntu 上运行,最近不是换 Mac M1 了么,想把这个项目在 M1 上也跑起来,毕竟我的那台 Windows 用起来发烫,是该体验下 M1 的性能了!

因为 M1兼容性不好,所以从 0 开始跑这个项目的时候遇到了很多问题,比如 MySQL 工具经常打不开,前端 Vue 项目起不来,所以专门针对这些疑难杂症,我也做好了记录,相信对使用 M1 的同学有所帮助,另外想学习 Spring Cloud 的同学也可以参照我的开源项目学起来~

我把后端、前端、小程序都上传到同一个仓库里面了,大家可以通过 github码云访问。地址如下:

Github: https://github.com/Jackson0714/PassJava-Platform 码云:https://gitee.com/jayh2018/PassJava-Platform 配套教程:www.passjava.cn

整体的架构图如下图所示:

本文主要内容如下:

一、配置 Nacos

Nacos 作为配置中心和注册中心,是必须要启动的。

1.1 下载地址

Nacos 下载地址:

代码语言:javascript复制
https://github.com/alibaba/nacos/releases

最新版是 2.0.0-bugfix,我下载后,启动成功了,但是无法访问 Nacos 后台,怀疑是本地环境有问题,所以换了一个低版本的 1.4.1,可以正常工作。另外我之前在 windows 机器上使用的 1.2.1 的版本,拷贝到 Mac 上也能正常运行。

1.2 启动 Nacos

进入 nacos 根目录,执行命令:

代码语言:javascript复制
sh startup.sh -m standalone

执行后的结果如下图所示:

看到 nacos is starting withi standalone 就表示启动成功。注意:启动成功不代表正常运行。

接下来访问 nacos 的后台管理系统:

代码语言:javascript复制
http://127.0.0.1:8848/nacos/#/login

账号和密码都是 nacos

1.3 添加命名空间

添加 7 个微服务的命名空间:

新建命名空间时需要填写的字段:

1.4 添加 question 微服务配置

在配置列表添加几个微服务的配置,目前保证 question 微服务和 thirdparty 微服务有配置即可。

如下图所示,添加三个配置项:数据源,mybatis 配置,其他配置。详细的配置参数参照这篇来配置:《SpringCloud 整合 Nacos 配置中心》。

1.5 添加 thirdparty 微服务配置

主要是配置阿里云 OSS,用来保存图片的。配置如下图所示,key 需要大家到自己登陆到阿里云并申请 OSS 才能获取到。参照这篇《SpringCloud 实战项目-整合 OSS 对象存储》。

二、初始化数据

创建数据库、表、初始化数据这些工作都需要做,下载一个 MySQL 客户端还是要方便点,然后找 Mac 上好用的客户端软件,下面是安装软件的艰辛历程。

1.1 安装 Mac 版 MySQL

首先需要安装 mac 版的 MySQL,下载地址:

代码语言:javascript复制
https://dev.mysql.com/downloads/mysql/

选择第一个就可以了,官网已经提示该版本兼容 Mac M1

代码语言:javascript复制
Packages for Catalina (10.15) are compatible with Big Sur (11)

下载后点击安装,安装成功后,到系统偏好配置里面找到 MySQL,并单击打开。

可以看到运行的 MySQL 实例是 MySQL 8.0.23,且默认开机运行。

![]

2.2 安装图形化 MySQL 管理软件

2.2.1 Workbench 在 M1 上不能运行

我试过安装 workbench 后,不能运行。

2.2.2 Squel Pro 在 M1 上不能运行

安装 Squel Pro 后,切换数据库的时候程序崩溃。

2.2.3 Navicat

经过上面两个软件的崩溃后,我最后还是下载了试用版的 Navicat,可以免费用 14 天,对于初始化数据足够了。

下载地址:

代码语言:javascript复制
http://www.navicat.com.cn/download/navicat-for-mysql

下载 macOS 的最新版 15,它是兼容 M1 芯片的。

然后需要执行三个 SQL 文件,文件我已经上传到仓库上了,

代码语言:javascript复制
/passjava-platform/data/sql

依次执行上面的三个文件后,会生成 6 个数据库:一个系统数据库,五个业务数据库。

三、启动微服务

主要启动 4 个核心服务:网关微服务题目微服务第三方微服务系统管理微服务

架构图如下所示:

目前这几个微服务已经整合了 Nacos、OpenFeign、Gateway、统一异常处理、链路追踪,Redis 等。

启动都是基于 IDEA 开发工具直接启动的,所以需要下载 IDEA。

3.1 下载安装 IDEA

我安装的 IDEA 是旗舰版 2020.3 的,试用版 30 天。大家可以下载免费的社区版 Community,功能上也能满足。

性能非常快,我的 Windows 的配置:ThinkPad、 32 G 内存、1T 固态硬盘,启动一个微服务需要 10 秒以上,而 Mac 只需要 3 秒

官网下载地址:

代码语言:javascript复制
https://www.jetbrains.com/idea/download/#section=mac

3.2 启动系统管理服务

我的开源项目的后台框架用的人人框架,它的主要功能就是后台的登陆、系统管理功能,所以必须启动 renren-fast 服务才能使用后台管理。

大家可以启动 RenrenApplication 这个 Service,启动成功后,会提示以下信息:

renren-fast 服务暴露的端口是 8080,但是这个端口对前端是不可见的,前端 API 都是走网关的 8060 端口。将前端的请求转发到 renren-fast 的 8060 端口,比如登陆请求。注意:一定要初始化完数据才能启动成功。

3.3 启动网关

网关微服务没有什么特殊要求,我都配置好了,直接启动就好了。另外如果遇到端口被占用的情况,可以通过如下命令解决:

代码语言:javascript复制
lsof -i:8060
kill -9 <进程 id>

网关微服务暴露的端口是 8060,启动后如下图所示:

3.4 启动题目服务

题目服务是核心模块,很多实战案例都是基于这个模块进行讲解的。启动服务之前,需要配置数据库 MySQL 的连接。

3.4.1 配置数据库连接
代码语言:javascript复制
文件路径:/passjava-question/src/main/resources/application.yml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/passjava_qms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
    username: root
    password: xxx

另外我们也可以通过 nacos 来配置:

3.4.2 启动题目服务

IDEA 工具中直接启动就可以了,暴露的端口是 11000,启动后如下图所示:

3.4.3 测试题目服务

用 postman 测试网关 题目微服务是否正常工作:

由于我的数据库中是有数据的,所以会返回很多数据,大家后面可自行添加数据。

3.5 启动第三方服务

这个第三方不是指另外一方的服务,而是我把与第三方中间件交互的服务都归在这个服务里面了,比如对阿里云 OSS(对象存储) 的操作。

这个服务的名字叫做:passjava-thirdparty。另外需要注意,OSS 需要大家到阿里云官网申请,有免费额度哦~配置方式可以参照这篇:《SpringCloud 实战项目-整合 OSS 对象存储》。

启动成功后,如下图所示:

四、启动 Admin 后台

Admin 管理后台的技术选型还是用的 Vue,所以需要使用 npm 工具来安装依赖。

4.1 安装 npm、nvm

使用 homebrew 安装 npm

代码语言:javascript复制
brew install npm

使用 homebrew 安装 nvm

代码语言:javascript复制
brew install nvm

4.2 切换镜像源

默认的 npm 使用的是官方的镜像源,我们切换为国内的淘宝镜像源。

代码语言:javascript复制
npm install -g cnpm --registry=https://registry.npm.taobao.org --verbose

4.3 安装 node_module

仓库里面并没有将依赖包一起上传,因为依赖包太大了,所以可在本地通过如下命令安装依赖包,这个是一次性的,后面不需要再执行。

进入到 passjava-platform/passjava-portal 目录,执行如下命令来安装依赖:

代码语言:javascript复制
cnpm install

启动前端portal

代码语言:javascript复制
npm run dev

报错,提示 Node Sass 不兼容当前的系统:

代码语言:javascript复制
Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64) with Unsupported runtime (88)

根据网上提供的解决方案,要先卸载 Node Saas

代码语言:javascript复制
cnpm uninstall node-sass

但是又提示 chromedriver 安装失败(当前操作系统不兼容),根据网上的解决方案,单独安装,但依旧提示 64 位系统不兼容,于是我把 package.json 文件中的 "chromedriver": "2.27.2" 删掉了,问题迎刃而解!(最新的代码已删除该依赖项配置)

我们接着往下执行:

先删除之前安装的 node_modules:

代码语言:javascript复制
rm -rf ./node_modules/

再次执行卸载 node-sass 的命令:

代码语言:javascript复制
cnpm uninstall node-sass

卸载成功后,安装 node-sass:

代码语言:javascript复制
cnpm install node-sass  --unsafe-perm --save-dev

重新安装依赖:

代码语言:javascript复制
cnpm install

4.4 启动后台

在根目录执行如下命令就可以启动后台了:

代码语言:javascript复制
npm run dev

启动成功后,会自动打开浏览器,访问的地址是 http://localhost:8081

4.5 登陆后台

账号密码都是 admin,输入验证码即可登录。注意:如果验证码没有出现,说明 RenrenApplication 微服务有异常,请查看 IDEA 中打印出的 log。

登录后台界面如下图所示:

PassJava 后台

4.6 添加题目分类

首先需要给题目添加分类,在后台点击新增类型,如下图所示:

注意:上传图片前需要启动 thirdparty 微服务,且 OSS 配置正确。

4.7 添加面试题

五、其他

5.1 未适配的镜像

我的开源项目中要用 Elasticsearch 和 Kibana,且它们是运行在 docker 上的,但目前这些镜像在 M1 上还未适配。所以用不了 ES 和 Kibana,难过

0 人点赞