spring boot实战系列2——构建微服务浅析

上一节,spring boot实战系列1——从hello world开始,我们其实已经用实例说明了用spring boot编写微服务的过程。这一节,我们对spring boot构建微服务进一步解析,以期让伙伴们更加深入了解具体细节。

1.什么是微服务及微服务架构

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

对微服务还不太了解的伙伴们,建议先看看我们公众号中另一篇文章:简单聊聊微服务,而我们这个系列主要是实战。

2.创建springboot微服务应用

我们可以有多种方式创建springboot微服务应用,在STS开发工具中,有多种插件给予支持,下面说说下各种方式的优劣。

(1)使用Spring Initializr

这是我们spring boot实战系列1中的内容,伙伴们可以去回顾一下从hello world开始。

(2)使用buildship插件

在STS中,File-->New-->Other-->Gradle-->Gradle Project,如图:

之后的过程就不赘述了,都很简单。需要说明的是,使用buildship插件新建的工程,有几个缺点:

1)生成的文件结构不够完善,需要调整

2)生成的build.gradle构建文件不够完善,需要调整

3)没法在创建工程时选择所需要的组件依赖

4)在项目创建时,点击finish后就需要下载构建文件中的依赖,速度比较慢。

具体内容就不截图了,大家可以尝试一下,所以一般不会使用种方式新建工程。

(3)使用gradle(STS)插件

在STS中,File-->New-->Other-->Gradle-->Gradle Project,如图:

next后,填写项目名称,在sample project中选择Java Quickstart,finish。

使用gradle(sts)插件新建项目,缺点同buildship。如需要安装gradle(STS)插件,按如下方法:

help-->Eclipse Marketplace,搜索STS,安装Spring Tool Suit

(4)使用Spring Starter Project

spring starter向导,原理同(1)的spring initializr的创建过程,而我们可以直接在IDE中跟创建其他项目一样进行新建。如图:

在type中我们可以选择Maven或者gradle

注:STS的3.8.x版本,spring starter project对buildship插件不支持,请升级为3.9.0版本以上,下载地址:https://spring.io/tools,当前最新版本为3.9.2。

next之后,我们可选择所需要的组件:

next之后finish,或直接finish。

此种方式的缺点是

1)在项目创建时,点击finish后就需要下载构建文件中的依赖,速度比较慢

2)gradle(STS)的gradle tasks插件面板不能分组gradle task,如图:

相比较下,buileship插件的gradle tasks插件面板更加整洁,如图:

综上,我个人的习惯是使用第(1)种方式,生成项目后导入IDE,然后使用buildship的gradle tasks插件面板构建。不过,这只是相对于在IDE中的使用习惯问题而已了,如果使用gradle命令行构建,或者集成自动构建等,则不在此讨论。

当然,我们还有一种更好的方式,看下面第(5)种:

(5)搭建自己的Spring Initializr服务器

以上,我们均是使用了spring提供的服务器,如果在没有联网的情况下,是不是就只能拷贝旧项目进行修改以新建项目了呢?可不可以搭建自己的Spring Initializr服务器呢,答案当然是可以的。后面,我们会出一篇关于如何搭建自己的Spring Initializr服务器的文章,这里先剧透一下,到时单独开篇。

3.spring boot微服务应用浅析

(1)简单说说gradle与build.gradle

gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。

gradle可以说结合了ant与maven两者的优点,gradle能很方便地实现自定义构建逻辑,还有更强大的依赖管理,更重要的是,gradle集成了其他构建工具,比如ant和maven,使得原来的项目很容易迁徙到Gradle。

gradle的构建脚本是build.gradle,需要说明的是:

buildscript中的声明是gradle脚本本身需要使用的资源,比如依赖项、maven仓库等。build.gradle文件中声明的依赖项、仓库地址等是项目需要的资源。

使用gradle的war插件可以将应用打包成war包,部署到web容器中运行。war插件继承自java,如果指定了war插件的话,即可以不用再声明java插件。

当修改了构建脚本,比如增加了依赖,需要右键项目或者构建文件,选择Gradle-->Refresh Gradle Project,对项目进行刷新。

(2)代码结构

如图,这是STS下gradle构建java项目的标准目录结构:

src/main/java----项目源码

src/main/resources----资源文件

src/test/java----测试代码

build----项目输出路径(如果Project Explorer视图下不可风,可切换到或Navigator视图或资源管理器下查看)

gradle文件夹下文件与gradlew构建脚本,允许没有安装gradle的机器进行gradle构建,进行build时会自动下载gradle-wrapper.properties配置的特定版本。gradlew用于unix,greadlew.bat用于window,使用方法 : gradlew + 命令,比如:gradlew biuld

(3)代码说明

1)入口类说明

DemoApplication.class是此应用程序入口类,用@SpringBootApplication进行了注解,鼠标移动到此注解上,可看到如下图的源码,包含了多个注解,最主要的是红框中的3个。

@SpringBootConfiguration----表示类为配置类,此类一般不提供业务功能,所以在此案例中,我们把hello服务移动到了Controller类下。

@EnableAutoConfiguration----自动配置,这也是spring boot的核心功能。spring boot能快速高效编写应用程序,就是依赖这个功能。比如我们引入web模块依赖,spring boot自动帮我们配置web项目相关内容如web.xml等,不需要我们再进行配置了。

@ComponentScan----自动扫描配置,默认会扫描当前包和所有子包。所以项目的其他类一般位于入口类所在包或子包之下,比如下面提到的Controller类。

2)Controller类说明

Controller类,我们一般放置于启动类的controller子包中,比如此项目中的DemoController.class类。不然,就算我们使用了@Controller注解,也无法自动将此类注册为SpringMVC的Controller对象。

在spring boot中,我们用@RestController对Controller类进行注解,此注解包含了@Controller与@ResponseBody注解,如下图,这样当我们需要使用@ResponseBody返回特定格式数据比如json时就只一个注解就可以了。

4.restful接口测试工具推荐

spring boot非常方便让我们实现基于restful接口的微服务,推荐伙伴们使用postman进行restful接口测试。使用非常的方便、简单、强大,不需要多作介绍。下载地址:https://www.getpostman.com/

本项目github地址:

https://github.com/exframework/springboot-demo

参考资料:

(1)https://projects.spring.io/spring-boot/

(2)https://gradle.org/

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180131G0519P00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区