你好,我是姚秋辰。

工欲善其事,必先利其器。在你跃跃欲试想要进入实战环节前,让我先带你把实战项目需要用到的十八般兵器准备好,也就是搭建好项目的开发环境。

为了避免在项目实战环节碰到一些棘手的兼容性问题,在你开始写代码前就要约定好各个组件的安装版本,包括Java、Maven和各个中间件的版本。

我们的微服务实战项目会用到很多中间件,其中也包括了Spring Cloud的中心化组件,如Nacos、Sentinel、Zipkin和Seata等等,这些Spring Cloud组件我会放在后面的实战环节边讲解边搭建。

今天我们主要来看下集成开发环境的搭建、数据库的安装和DB脚本的导入,此外,我还会手把手带你安装几个通用的中间件。这节课要安装的工具比较多,你一定要耐心看完,不然后面的课程可能会卡壳哦。

闲话少叙,我们现在就开工吧。

环境准备

我推荐你使用Mac笔记本或者是Linux系统来编写、运行本课程的实战项目,如果你使用的是Windows系统,可以尝试做个双系统,或者用Cygwin、Ubuntu虚拟机等方式尽量模拟Linux环境的开发。一来可以学习Linux命令,二来可以尽量保持本地开发环境与线上生产环境的一致,毕竟工作中你所开发的Java程序最终还是部署在Linux服务器环境。

以下是我在本地Mac系统上的安装方式,如果你使用的是Windows系统,我也提供了相关组件的官网下载地址,相信对于程序员来说,安装软件是小菜一碟。因为安装的工具比较多,所以我建议你按照课程中介绍的顺序来安装。

Homebrew

Homebrew是Mac系统上的一款非常便利的软件安装工具,可以帮你安装大部分开发工作所需的各种工具软件。这节课中的很多工具,我们也可以使用它来安装。你可以在Homebrew的官网查看Homebrew的详细安装方法。

你可能发现在国内网络下安装Homebrew比较缓慢,这里我给你提供两种解决办法:一种是使用VPN连接,也就是我们俗称的翻墙,可以大幅提高安装速度;另一种方式是将Homebrew指向国内镜像获取安装脚本,替换镜像的命令可以在官方的安装文档中找到。

安装完成之后,你可以在命令行输入brew -v命令查看版本信息,来验证安装是否成功:

vincent@LM-SHB-40513998 ~ % brew -v
Homebrew 3.2.17
Homebrew/homebrew-core (git revision 5fbb5bcf8d9; last commit 2021-10-24)
Homebrew/homebrew-cask (git revision b08f2eff16; last commit 2021-10-24)

当Homebrew准备就绪,你就可以使用brew install命令安装所需要的软件了。在实际工作中,你可以使用清华大学或者中科大的国内镜像源,来大幅提高各软件的下载速度。

在你使用国内镜像源的时候,可能会碰到软件无法安装成功的问题,这往往是因为软件所依赖的某个工具包无法下载,你只要从日志信息中找到卡住安装流程的工具包叫什么,然后使用brew install xxx命令(xxx是工具名称)单独安装这个工具包,之后再重新安装你需要的软件就可以了。这个办法屡试不爽。

安装好Homebrew后,我们再来安装Java和Maven。

Java和Maven

这两样工具可是我们Java工程师吃饭的家伙,安装过程我就不唠叨了。为了避免兼容性的问题,你只要注意安装正确的版本就可以:

由于国内网络访问Maven中央仓库比较慢,在编译项目的时候,你会发现下载Maven依赖项的时间会比较久,你可以修改Maven的settings.xml文件,将其默认镜像指向国内的镜像(比如阿里云镜像),这样可以大大加快依赖项下载速度。

安装完Java和Maven之后,我们再来安装集成开发工具。

IntelliJ IDEA

IntelliJ IDEA是JetBrains全家桶中的一款应用,它是目前公认最强大的Java语言开发集成环境。如果你已经受不了Eclipse的卡顿,那不妨借此机会转向IDEA的怀抱。

你可以在JetBrains的官网下载IntelliJ IDEA,IDEA的免费社区版已经足够你完成复杂的开发任务了。如果你想体验更多的产品功能特性,也可以选择购买商业版license。要是你有高校教育邮箱(edu邮箱)就更方便了,你可以使用edu邮箱注册JetBrains账号,并免费申请商业版使用权用于教学和学习。

Lombok

为了提高编程效率和代码可读性,我在实战项目中还使用了Lomkok插件自动生成代码。不过,你需要在自己的开发环境中安装Lombok插件,这样你的IDE才能识别Lomkok的注解。

在IntelliJ IDEA中安装Lombok非常简单,你只需要在IDEA的插件安装界面搜索Lomkob这款插件并安装即可,如下图所示:

如果你使用Eclipse作为开发工具,需要在Plugins界面安装Lombok插件,或者将Lombok插件的安装文件复制到Eclipse安装路径下的Plugin文件夹。不管你使用的是Eclipse还是IntelliJ IDEA,记得在装完插件后重启开发环境。

下面,我们再来安装实战项目需要用到的数据库。

MySQL和DB可视化工具

我们的实战课程采用MySQL数据库,当然,如果你在本地已经安装了MariaDB也是可以的,因为MariaDB是MySQL的作者参与制作的开源版数据库,它可以全面兼容MySQL的功能。

我本地安装的MySQL服务器版本为8.0.27,你可以使用brew命令安装最新版的MySQL,具体命令为:

brew install mysql

当然,你也可以选择从MySQL官方网站下载安装包,免费的社区版就足以满足我们实战项目的需要。

安装完成之后,我们再使用下面的命令来启动MySQL:

mysql.server start

待MySQL成功安装并启动后,我们来验证一下是否可以登录数据库。在命令行输入:

mysql -uroot -p

然后,我们使用默认的root用户登录数据库(密码默认为空),如果你可以在命令行看到以下内容,就表示数据库安装成功。

如果你还没有安装可视化DB工具,那么我推荐你使用DataGrip,它也是JetBrains全家桶的一款软件。你可以选择通过DataGrip官网下载安装包。

下载DataGrip并安装成功后,你可以在DataGrip中添加一个MySQL数据源指向本地MySQL数据库,用户名为默认的root,密码为空,JDBC URL是jdbc:mysql://localhost:3306。在添加数据源之前,我们还需要在弹窗界面上点击下载MySQL Driver:

到这里,MySQL和DataGrip就安装好了。

在开始项目实战之前,我们还需要在MySQL中执行数据库建表语句,将实战项目所需要用到的数据库表导入到MySQL。建表语句所在的SQL文件,位于Gitee项目源代码仓库下的“资源文件”目录中的“Coupon项目建表语句.sql”文件里。

你可以在数据库命令行中执行SQL文件,或者将文件内容copy到DataGrid中执行。在建表语句的第一行中,我指定了数据库名称为geekbang_coupon_db,我们在稍后的实战项目中会将这个数据库名称配置在JDBC URL中。

CREATE DATABASE IF NOT EXISTS geekbang_coupon_db;

当然,你也可以给这个数据库起一个更响亮的名字,替换掉SQL脚本中的名称geekbang_coupon_db。执行完数据库脚本后,我们再来安装实战项目所需要用到的消息中间件。

安装RabbitMQ

RabbitMQ是目前使用最广泛的消息组件之一,在后面的Spring Cloud课程中我会使用Stream组件搭配RabbitMQ发送异步消息。

你可以直接使用下面这个命令安装RabbitMQ,也可以在RabbitMQ官网下载安装包。

brew install rabbitmq

我本地安装的RabbitMQ版本是3.9.8,这里我推荐你直接安装RabbitMQ最新的稳定版本,因为某些RabbitMQ的早期版本缺少必要的插件支持,如果你已经安装了较早年代的RabbitMQ,可以趁这个机会替换成最新版。

如果你想了解RabbitMQ的更多功能特性,RabbitMQ的官网上提供的技术文档是一个很好的学习途径,你可以去看看。

在安装完成之后,你可以直接通过在命令行执行下面这条代码来启动RabbitMQ。

rabbitmq-server

如果你是使用安装包安装的话,那么你还需要将RabbitMQ的安装路径加入到PATH系统变量。成功启动后,你可以在命令行中看到RabbitMQ版本和启动成功的日志,这表示RabbitMQ后台服务已处于运行状态。

接着,我们在浏览器中打开RabbitMQ的本地操作界面http://localhost:15672/,其中的“15672”是RabbitMQ启动时的默认窗口。你可以使用默认的内置用户登录系统,用户名和密码都是guest。顺利登录后你会看到如下页面:

到这里,RabbitMQ就算是安装好了。下面,我们再来安装最后一个软件,Redis。

安装Redis

Redis是一个key-value数据库,我们在学习微服务网关的时候将会用Redis实现网关层限流。安装Redis的方式非常简单,你可以选择使用下面这条命令安装最新版Redis Brew。

brew install redis

当然,你也可以选择从Redis官网下载源码并在本地完成编译和安装。

安装完成并成功启动Redis服务后,我们可以通过命令行验证Redis是否运行正常。在命令行直接执行这条命令:

redis-cli

执行完成后,默认情况下会连接到Redis的默认地址localhost:6379,这样我们就来到了Redis控制台。

在控制台中,你可以尝试通过set命令设置一个key-value键值对,并使用get命令读取key对应的值,通过这种方式来验证Redis是否正常工作。在下面的图中,我通过set命令设置了一个key=geekbang,value=955的键值对,然后使用get命令去读取geekbang的值。

到这里,我们的工具安装就结束了,后续进入到Spring Cloud微服务实战环节的时候,我们还会用到更多的中间件,比如注册中心、微服务网关、链路追踪组件、ELK日志查询系统、分布式事务协调器等等,到时候我再带你手把手安装这些软件。

总结

今天这节课,我带你安装了编译环境、本地开发环境、MySQL数据库和一些常用的中间件,这些组件足够我们搭建起一个Spring Boot的单体应用了。

环境的安装看似简单,实则遍地是坑,很多兼容性问题就是由于组件版本导致的。我这里给你举两个兼容性问题的例子:

  1. MySQL版本:不同MySQL版本对JDBC连接串的要求是不一样的,有的版本需要你在JDBC URL中额外指定Timezone等信息。你会发现,原先得得好好的应用,某一天升级了数据库之后很可能会挂掉;
  2. Maven版本:有些Maven插件要求高版本的Maven支持,有时你会发现在一台电脑上可以编译通过的源码,换了一台电脑可能就编译失败,这很有可能是Maven版本的问题。

这些兼容性问题往往都很隐蔽,不好排查。所以呢,才有了程序员圈子里的硬梗“一定是环境问题”。那么,当你碰到一些棘手的异常情况的时候,比如某个应用在没有代码改动的情况下突然不正常了,不妨先抱着怀疑的态度,去检查一下是否有外部环境的变化,比如中间件版本、编译环境等等。

下一讲我将带你体验Spring Boot急速落地的过程,和你手把手搭建一个Spring Boot实战项目,为后面的Spring Cloud章节的学习做好前置功课。

思考题

最后,请你思考两个问题:

  1. 你在学习新技术、安装新的组件的过程中,通常都是通过什么途径来摸索的呢?在这个过程中你有哪些提升效率的小窍门(比如使用homebrew软件)可以分享吗?
  2. 你曾经碰到过最棘手的线上Bug或者兼容性问题是什么?最后又是如何被发现并解决的?我们在留言区来一场疑难Bug大Battle吧!

好啦,这节课就结束啦。欢迎你把这节课分享给更多对Spring Cloud感兴趣的朋友。我是姚秋辰,我们下节课再见!

评论