Spring Boot 2.0深度实践-初遇Spring Boot - bijian1013
Spring Boot 2.0深度实践-初遇Spring Boot
目前业界最流行的微服务架构正在或者已被各种规模的互联网公司广泛接受和认可,业已成为互联网开发人员必备技术。无论是互联网、云计算还是大数据Java平台已成为全栈的生态体系,其重要性几乎不可替代。Spring Boot作为微服务的基础设施之一,背靠强大的Spring 生态社区,支撑Spring Cloud技术体系。本课程通过实战的方式,从单一应用开发升级为多模块应用开发。根据不同的部署场景,构建不同格式的打包文件,以及在开发和部署阶段,执行不同的运行方式。
一.Spring Boot介绍
Spring Boot官方发布的最新的2.0.0.M版本,它把SpringFrame5.0.0版本引入进去了,SpringFrame5.0.0版本依赖一些新的技术,其中包括webflux和Kotlin的支持,它必须依赖JDK1.8,同时它是基于模块化,也就我们常用的Maven、Gradle方式来进行依赖引入。这个版本有非常多的亮点,包括性能提升以及个个方面的整合。
1.Spring Boot的角色
Spring Framework是一种J2EE的框架,Spring Boot是一种快速构建的应用,Spring Cloud是构建Spring Boot的分布式的环境,也就是我们经常说的云应用,这三个角色是相辅相成的,Spring Boot是处于中流砥柱的作用、承上启下的角色。
2.Spring Boot2.0新特性
编程语言:Java8+、Kotlin
底层框架:Spring Framework 5.0.x
全新特性:Web Flux,是一种新型的编程模型,是对传统SpringMVC的一种补充,传统SpringMVC是采用标签或者注解的方式来进行描述我们相应的请求映射以及响应,Web Flux同样也兼容这种方式,同时它也提出了新型的声明式的、函数式的编程。
为会么选择Web Flux?
a.函数编程:Java8 Lambda
b.响应编程:Reactive Streams
c.异步编程:Servlet3.1或Asyn NIO
二.第一个Spring Boot项目
1.Spring Boot环境准备
装配JDK(http://java.oracle.com/)
装配Maven(http://maven.apache.org/)
下载解压后,将D:\software\apache-maven-3.6.0\conf下的settings.xml拷贝到D:\Maven下,并在此目录下新建repo文件夹,详细配置可以参看:https://bijian1013.iteye.com/blog/2413255,最后修改settings.xml中的如下两处内容。
装配IDEA(http://www.jetbrains.com/idea/)
修改D:\software\IntelliJ\bin\idea.properties中的如下配置。
打开IDEA,进行JDK、Maven相关配置。
2.第一个Spring Boot项目
简单应用:
a.编写REST程序
b.运行Spring Boot应用
c.使用HTTP请求工具:PostMan,下载地址:https://www.getpostman.com/downloads/
场景说明:
a.定义用户模型,包括属性:用户ID和名称
b.客户端发送POST请求,创建用户(Web MVC)
c.客户端发送GET请求,获取所有用户(Web Flux)
进入https://start.spring.io/,填写相关信息后,点击“Generate Project”下载,将其下载到我的开发目录:D:\software\IntelliJ\IdeaProjects
Reactive Web是基于Web Flux来开发的,同时它是基于Netty的方式,而传统的SpringMVC是基于传统的Servlet容器(Jetty或Tomcat,默认是Tomcat方式)
下载下来后进行解压。
IDEA import Project选择first-app-demo。
一直“下一步”直到“完成”,依赖包下载下来后,我们不难发现会使用到很多Netty的jar包。
如果在pom.xml中配置了spring-boot-starter-webflux,即激活了webflux模块,则默认的嵌入式容器变成了Netty。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
这里的Reactor和我们传统的NIO是有一点不太一样,传统的NIO实现的是Reactor模式,是同步非阻塞,而这里的Reactor是异步非阻塞的Reactive的实现,这里有Flux和Mono两个概念,Mono是0到1的对象,Flux是0到N的对象,Flux类似于一个集合,集合有可能是空集合,也有可能包含很多元素,Mono类似我们JAVA8里面的一个新的接口Optional,Optional是防止空指针提出的一个新的接口,我们表达一个对象的时候,有可能为空,为了表达它不是空我们可以用Optional来包装,当它不存在时,isPresent()为false时表示它是空。
Mono<String> string = request.bodyToMono(String.class);
我们传统是@RequestMapping方式来进行映射的,接下来我们将通过函数式编程来声明我们的接口,同时我们要注意Spring5之后将Servlet接口进行了封装(其实不光是Servlet,还有很多其它的封装)
Functional Endpoints:它是函数式的端点,这个端点可以理解成就是Rest的暴露。
三.构建方式、多模块和运行方式
1.Spring Boot构建应用-命令行方式
a.图形化方式(http://start.spring.io/)
b.命令行方式(Maven)
上面我们通过图形化方式构建了第一个Spring Boot项目,但它依赖我的操作系统是否支持图形化,如果我没有这个环境,就可以通过Maven方式,这种方式是在我们的控制端或控制台输入命令行方式来进行构建的,这种构建方式相对图形化方式复杂一点,但是它也是有规律可循的。
2.Spring Boot多模块
3.Spring Boot项目打包
4.Spring Boot运行模式
四.Spring Boot小结
1.Spring Boot介绍
三大特性:
自动装配(包括SpringMVC、JDBC、事务等Spring的组件来进行装配,装配的时候有一定的条件)
嵌入式容器,包括Tomcat、Jetty这样的嵌入式容器,也就是把传统的Web容器嵌入到应用里面来了
为生产准备的,为产品运维来进行的一个产品整合,有别于传统的JAVA EE容器,传统的JAVA EE容器需要自我约束、自我实现
2.Spring Boot项目
通过一个简单的应用,分别针对Web Flux、Web MVC两种场景来实现了一个简单的逻辑,同时我们把这个应用拆分成多个模块的应用,多模块应用也是我们现实工作中用的比较多的一种场景,我们将相应的模块进行功能划分,封装到不同的模块时进行组装和组织
3.项目打包、运行模式
介绍了不同的打包方式,每种打包方式在不同的场景里面使用的方式是不太一样的,以及它对应的运行模式,运行模式有各种各样,希望大家在工作当中通过实战的方式把这些打包和运行方式运用起来