Spring Boot 2实战之旅(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-18 02:44:50

点击下载

作者:杨洋

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Spring Boot 2实战之旅

Spring Boot 2实战之旅试读:

前言

微服务一词相信对很多开发者来说已经耳熟能详了。在我曾经工作的公司,还是使用单体项目来部署时,无论是打包还是运行都耗时耗力,这一直让我很苦恼。同时,每次需要创建新应用、构建项目配置Spring的时候也十分麻烦。一次偶然的情况,我接触了Spring Boot框架,开始对其“约定优先配置”的特性着迷了。这个由Pivotal团队进行维护开发的Spring Boot,版本更迭非常快,社区活跃度很高。我在闲暇之余查阅了国内很多招聘网站,原来已经有很多公司将Spring Boot作为必备技能。

此后,我花费了很长的时间翻看技术博客、官方文档等,深入学习Spring Boot框架。在公司接下来的项目中,都以Spring Boot为主来构建项目,并且成功地将很多使用Spring Boot的项目投入生产,Spring Boot框架的快速构建与部署与公司快速迭代版本的风格完美呼应。这是Spring Boot值得学习的一大原因。

本书沿袭我学习Spring Boot的路线,使用Spring Boot与当今常用的中间件结合,并且配备对应的实例代码。最后的两章项目实战是对Spring Boot的学习之路做出总结,为本书画上一个圆满的句号。希望读者阅读本书后能够有所收获。如何阅读本书

在阅读本书的过程中,建议对照源代码按顺序学习。当然,如果对部分章节的内容比较熟悉,也可以直接跳过,学习需要巩固的章节。本书内容共分为14章,开发工具使用IntelliJ IDEA,Spring Boot版本为2.0.3,各章节内容说明如下:

第1章介绍Spring Boot框架的特点以及学习它的重要性,最后列出Spring Boot的历史版本,让读者对Spring Boot有一个大致的了解。

第2章介绍如何搭建Spring Boot的开发环境,通过使用IntelliJ IDEA构建Spring Boot项目,并且对Spring Boot项目的基础结构进行介绍。

第3章介绍如何使用Spring Boot开发Web应用,了解Spring MVC和Spring Web Flux的不同,最后学习Spring Boot的一些Web模板框架,让读者可以对Spring Boot开发Web应用游刃有余。

第4章和第5章都是基于Spring Boot对数据库的使用进行学习。其中,第4章从Spring Boot使用各种数据库的依赖和配置开始介绍,然后介绍当今Java语言流行的ORM框架的使用,最后学习Spring Boot使用Druid数据库连接池。第5章介绍Spring Boot常用缓存框架,最后对Redis和Memcached进行比较,让读者选择缓存时有一定的基础。

第6章介绍Spring Boot对几种常用日志框架的使用,最后介绍分布式情况下如何使用ELK进行日志收集。

第7章介绍当今比较常用的两种安全框架,并且使用详细的案例对二者进行运用。

第8章介绍Spring Boot如何进行监控,涉及当今Spring Boot框架常用的监控,使读者对Spring Boot的运行状态更加了解。

第9章介绍Spring Boot如何使用消息队列,分别从RabbitMQ、Kafka和RocketMQ的使用实例进行介绍,最后对三者进行比较,让读者在选择消息队列时有一定的借鉴。

第10章对Spring Boot的两大常用搜索框架进行详细的介绍,从普通增、删、改、查到复杂查询,让读者使用搜索框架时不再茫然。

第11章介绍使用Spring Boot时的一些小技巧,比如启动Banner、Lombok、邮件发送、事务、异常等。虽然知识略微零散,但是都是实用的技巧。

第12章介绍Spring Boot的多种部署方式,让读者可以根据实际情况部署自己的应用程序。

第13章和第14章分别使用博客系统和博客后台系统对Spring Boot的使用进行综合实战,这两个实战案例是对本书内容的总结。本书读者对象• 初学者• Java开发人员• 架构师• Spring爱好者本书技术支持

非常感谢大家能够购买和阅读本书。虽然完成本书尽了笔者最大的努力,但是由于笔者的精力和能力有限,在编写过程中难免会有一些疏漏和不足之外,希望各位读者不吝指正。关于本书的任何问题都可以发送电子邮件至yangyang@dalaoyang.cn与我交流。源代码下载

本书所有源代码均上传至码云,地址是https://gitee.com/dalaoyang/springboot_book。如果下载有问题,请发送电子邮件至booksaga@126.com,邮件主题为“求Spring Boot 2实战之旅下载资源”。致谢

在编写本书时,我得到了很多人的帮助。

首先,感谢我的妻子,在我遇到困难时给予鼓励,在我迷茫时的开导,谢谢她在我编写本书的过程中承担了所有家务,并且不遗余力地支持我。

其次,感谢我的父母,感谢他们从小对我的抚育与培养,感谢他们对我事业的支持。

另外,还需要感谢一下泥瓦匠在百忙之中对本书的细心校对,让本书的一些细节更加完善。

最后,感谢清华大学出版社的王金柱编辑,感谢您在本书编写、出版整个过程中的辛勤付出。也要感谢清华大学出版社所有参与本书编辑和出版的老师们,感谢大家对本书的帮助。杨 洋2019年3月1日第1章 Spring Boot概述

本章将对Spring Boot进行整体的介绍,从Spring Boot的特点开始,逐步让大家了解学习Spring Boot会为我们带来的好处,最后从Spring Boot的发展史(Spring Boot 1.x到Spring Boot 2.x)来全面概述Spring Boot微服务框架的多功能性。1.1 Spring Boot简介

Spring Boot是由Pivotal团队在2014年发布的全新框架。从Spring Boot的Logo中可以看到,Spring Boot是要打造一个快速构建的Spring应用,如图1-1所示。正如Spring官网(官网地址:http://spring.io/)介绍的:图1-1 Spring Boot官方Logo图片

翻译过来的意思大概是:Spring Boot的设计是可以尽可能快地启动和运行,只需要最少的Spring配置。Spring Boot对构建生产就绪应用程序具有独特的方式。从官方的介绍可以看出Spring Boot的核心思想是“约定优先于配置(Convention Over Configuration)”,其本质其实还是基于Spring来实现的。对于了解Spring的人或者使用过Spring的人来说,Spring烦琐的配置让很多程序员眼花缭乱(各种XML、Annotation配置等),甚至很多时候发生错误也很难快速定位错误的地方。而在Spring Boot框架中,为我们提供了默认的配置,从而使开发人员不再需要定义样板化的配置,通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(Rapid Application Development)成为领导者。1.2 Spring Boot的特点

Spring团队曾经为开发者提供了无数的便利,其提供的IOC和AOP两大特性一直为广大开发者所“深爱”。当然,Spring框架还提供了很多优秀的特性,在这里就不一一介绍了。但是,在传统Spring框架中有一个重大的缺点,那就是在配置的时候很复杂,需要重复地进行一些配置。Spring团队可能感受到了这一点,在2014年,Spring团队发布了Spring Boot框架。另外,官网首页的Spring Boot部分也介绍了诸多Spring Boot的特点,如图1-2所示。本节将逐一介绍Spring Boot框架的特点。图1-2 Spring Boot官网简介(图片来源于Spring官网:http://spring.io/)1.2.1 快速构建项目

Spring Boot具有多种快速构建项目的方式,如下面几种形式:(1)使用Eclipse(MyEclipse)可以利用创建Maven项目的方式创建Spring Boot项目。当然,如果在Eclipse中安装了Spring Tools,就可以直接创建Spring Starter Project。(2)使用IntelliJ IDEA,可以利用创建Spring Initializr的方式创建Spring Boot项目,在后续章节会详细介绍这种方式的过程。(3)使用Spring Tool Suite,可以直接新建Spring Starter Project项目,过程类似Eclipse创建Spring Boot项目。(4)使用官方文档创建项目,在Spring官方文档上面提供了一种在线生成Spring Boot项目的方式,首先访问Spring官方快速构建地址(官网地址:https://start.spring.io/),在这个页面上选择对应版本、构建工具等,填写完成后单击Generate Project按钮,即可在本地下载一个Spring Boot项目的压缩包。

当然,可能还有很多方式快速构建项目,这里就不一一介绍了。笔者在这里推荐使用IntelliJ IDEA开发项目,个人感觉这个开发工具还是很强大的,并且提供了很多插件供开发者使用,读者也可以根据自己的喜好进行选择,毕竟适合自己的才是最好的。1.2.2 嵌入式Web容器

在传统Java Web项目中,当项目开发完成之后,还需要配置所需的Web容器(诸如Tomcat或者WebLogic之类的Web容器)。但是在Spring Boot搭建的项目中,内部提供了几种Web容器,如Tomcat、Jetty和Undertow。在Spring Boot 1.x中默认为Tomcat;Spring Boot 2.x中则分为两种情况,引入spring-boot-starter-web依赖为Tomcat,引入spring-boot-starter-webflux依赖则为Netty。当然,也支持使用之前指出的几种Web容器,开发者只需要根据场景选择适合的Starter来获取一个默认配置好的容器即可,当启动成功后,应用一个默认端口为8080的HTTP服务。1.2.3 易于构建任何应用

Spring Boot提供了一个强大的starter依赖机制,实质上Spring团队将Spring Boot框架整合了一切常用的maven依赖,使Spring Boot想要整合对应依赖,就要将需要的依赖全部引入。比如,需要在项目中使用Web,也就是我们常说的Spring MVC,如果是原有的maven项目,就需要引入很多依赖才能完成这个简单的需求。但是在Spring Boot项目中,我们只需要在maven依赖中加入spring-boot-starter-web依赖即可,是不是很简单?这里再举一个例子,比如项目中需要使用MySQL数据库,这里只需要加入MySQL依赖,并且在配置文件中配置数据库信息就可以正常使用。1.2.4 自动化配置

这个特点是上一个特点的延伸,在应用程序中引入依赖之后,其实还有一个强大之处在于Spring Boot应用会根据引入的依赖提供一些默认的配置供我们使用,如果需要修改,那么只需要在配置文件中修改对应的配置即可完成需求。这里还是以Spring MVC为例,传统Spring MVC项目需要配置对应的诸如ApplicationContext.xml(Spring配置文件)、ApplicationContext-mvc.xml(Spring MVC配置文件),而在Spring Boot中,这些需要的配置已经为我们默认配置了一套,不需要再进行配置了。比如,我们要加入Web应用程序根路径test的话,只需要在application.properties(Spring Boot应用程序默认配置文件)中加入server.servlet.context-path=/test即可。1.2.5 开发者工具

在开发Web应用的时候,总会有一个困扰我们的问题,修改代码总是伴随不断重启项目,需要不断地断开Web容器,再重启来测试我们的代码。在Spring Boot应用中提供了开发者工具(spring-boot-devtools),当我们重新编译类文件的时候,开发者工具会自动替我们重启应用,无须手动单击重启。1.2.6 强大的应用监控

在生产环境中,应用的各项指标监控更是必不可少。在Spring Boot应用中提供了一个spring-boot-starter-actuator(以下简称Spring Boot-Actuator)来供我们查看应用的各项指标,如health(健康检查)、dump(活动线程)、env(环境属性)、metrics(内存,CPU等)等指标,以监控我们的应用,同时可以配合使用spring-boot-admin-starter-server(以下简称Spring Boot-Admin)监控我们的项目。Spring Boot-Admin可以在利用监控Spring Boot-Actuator端点的同时监控所有微服务应用的健康状态,如果出现异常,就可以向维护人员发送邮件或者以其他方式给予告警。不只是这样,就连监控神器Prometheus也可以通过简单的配置接入Spring Boot应用程序中。1.2.7 默认提供测试框架

Spring Boot应用在创建项目之后会默认为我们创建测试类的文件,实质上就是引入spring-boot-starter-test依赖,然后可以通过它对各种场景进行测试,足够满足对项目的测试需求。1.2.8 可执行Jar部署

由于Spring Boot项目内嵌Web容器,因此提供了一种特殊部署方式,可以直接利用Maven或者Gradle对Spring Boot项目进行打包,生成一个JAR文件,然后直接在具备环境的服务器或本地环境中利用java -jar xx.jar执行JAR文件,使应用能够快速运行。1.2.9 IDE多样性

正如1.2.1小节介绍的,Spring Boot支持的开发工具很多,无论是曾经几乎所有开发者都使用的Eclipse一族,还是现在流行的IntelliJ IDEA,又或者是专门为开发Spring系列而生的Spring Tool Suite都是开发Spring Boot应用的不二法宝。1.3 为什么要学习Spring Boot

为什么要学习Spring Boot呢?这可能是很多读者心中的疑惑。在1.2节,我们通过了解Spring Boot的特点应该已经对Spring Boot框架产生了一定的兴趣,接下来笔者将从几个方面来整体阐述学习Spring Boot框架的理由。1.3.1 简化工作

Spring Boot最大的优点是在一定程度上简化了我们的工作,大致分为以下几个角度对工作进行简化。• 依赖简化:Spring Boot自有的starter中提供了一些可以快捷使用的依赖,让整合或集成一些常用的功能更便捷。• 配置简化:在配置方法中,如果没有特殊情况,Spring Boot为我们提供了一些默认的配置,比如端口号默认为8080等。• 部署简化:正如前面介绍的可执行JAR部署,与传统服务的Web模式部署(打WAR包部署)相比,连安装Web容器的时间都节省了,不只是开发者,对运维人员也是福音。• 监控简化:可以通过引用Spring Boot依赖的方式快捷提供监控端点,无代码侵入,十分便捷。1.3.2 微服务时代“微服务”一词最早是由Martin Fowler的《Microservices》一文(原文链接为https://martinfowler.com/articles/microservices.html)提出的,其核心思想是将一个单体应用根据业务功能拆分成为多个服务,使业务代码之间不再耦合。接下来,我们介绍一下由单体应用转变为微服务应用的好处。1. 微服务的优势• 服务解耦:将单体应用转变为多个服务,服务与服务之间通过HTTP协议或其他约定好的协议等进行网络通信。• 技术选型广泛:微服务不需要局限于固定的技术栈,各个服务的开发团队可以根据场景自由选择开发技术,如Java、PHP、Node.Js等。• 服务并行开发:可以多个团队分别开发不同的模块,每个团队负责一个或者几个服务,相互不受影响。• 单一职责:不同服务的团队只需要关注自己团队的业务,无须经常为了熟悉业务而耽误时间。• 独立部署:由于每个服务都是独立的项目,因此当服务开发完成后,可以直接独立部署。• 敏捷开发:每个服务的业务迭代只需要更新对应服务的功能即可,支持快速迭代。• 故障隔离:在传统单体项目中,如果某个功能发生故障,就可能导致整个服务发生宕机,但是在微服务中,一个服务发生宕机,其他服务仍然可以继续工作。2. 微服务的劣势• 部署需要花费更多的精力:当服务拆分得非常多的时候,可能需要消耗更多的精力去运维管理这些应用。传统的单体应用下,运维人员只需要保证一个服务正常运行即可,但是拆分微服务后,可能需要保持几十,甚至上百、上千的服务高效运行,这对运维人员来说是一个很大的挑战。• 服务间的接口问题:正因为拆分了微服务,服务与服务间使用接口进行相互调用,当一个接口需要改变格式或者增减数据时,所有调用这个接口的服务都需要做出相应的调整才能正确地使用。• 高可用:拆分微服务后,可能有很多服务需要调用同一个服务或者接口,这个服务的可用性就需要让我们更加注意。• 分布式事务:微服务系统各个服务间可能使用不同的数据库,比如搜索服务使用Elasticsearch、基础服务使用MySQL、评论服务使用MongoDB,对于不同数据库间数据的一致性将是我们面临的重大挑战。• 网络复杂性:由于各个服务间使用接口调用,因此系统间需要考虑很多网络延迟等客观因素来保证服务间的正常运转。• 测试的复杂性:在测试方面,服务间的接口调用、服务间的测试需要一套整体的测试方案,自动化测试就显得必不可少。

由于Spring Boot项目可以提供快速开发、测试、部署,因此Spring Boot是微服务应用的不二选择。1.3.3 社区背景强大

社区背景强大其实是Spring Boot如今盛行的原因。众所周知,Spring家族对于开发者提供了无尽的便利,而作为Spring的亲儿子“Spring Boot”则继承了一切Spring的优点,并且规避了很多Spring框架臃肿的缺点,而后续Spring家族的分布式框架Spring Cloud也是基于Spring Boot框架实现的框架,所以作为Spring的爱好者,或者将要学习Spring Cloud框架的开发者,Spring Boot是必须要学习的。1.3.4 市场需求

在写这本书之前,笔者游历于各大国内、国外技术论坛,无论是在国内还是在国外,Spring Boot的呼声都特别高,而且框架的更新频率特别快。如图1-3所示是从2014年到2018年Spring Boot的百度搜索指数。图1-3 Spring Boot百度搜索指数(图片来源于百度搜索指数)

从搜索指数可以看出,Spring Boot的搜索值日趋增长,关注度特别高。

另外,我们从互联网招聘网站上来看,已经有超过7成以上的公司将Spring Boot框架作为筛选人员的必要条件,所以无论是从个人提升,还是比较实际的跳槽、涨薪等,学习Spring Boot都会为你的技术栈增光添彩。1.4 Spring Boot的发展历史

Pivotal团队对于Spring Boot更新得非常频繁,而且在Github和国内社区的关注度都极高。接下来我们看一下Spring Boot的发展史。1.4.1 发布里程碑(2013.8.6)

Phil Webb在Spring官网博客上宣布了一个名为Spring Boot的新项目的第一个里程碑版本。1.4.2 Spring Boot 1.0(2014.4)

Spring Boot问世,为所有Spring开发提供快速和可广泛访问的入门体验,其中版本功能包括但不限于以下几点:• 嵌入式服务器。• 外部配置。• 健康检查。• 安全性。• 快速运行。1.4.3 Spring Boot 1.1(2014.6)

第一次更新,下面列出比较重要的几点更新,详细版本内容可以查看Spring Boot的Github官方版本介绍,地址为https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.1-Release-Notes。• 对spring-boot-starter-test进行修改。• 新增对Elasticseach和apache solr的自动配置支持。• 新增框架模板Freemarker、Groovy和Velocity。• Spring-WS适用于Spring Web服务支持。• 对Jackson JSON库进行了改进。• 添加了新的注解。1.4.4 Spring Boot 1.2(2015.3)

对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看Spring Boot的Github官方版本介绍,地址为https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.2-Release-Notes。• 使用Tomcat 8和Jetty 9作为嵌入式Servlet容器,提供Servlet 3.1和增强的WebSocket支持。• Spring 4.1。• 支持JTA实务。• 提供JMS支持。• 提供电子邮件支持。1.4.5 Spring Boot 1.3(2016.12)

对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看Spring Boot的Github官方版本介绍,地址为https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3-Release-Notes。• Spring更新至4.2。• Spring Security更新至4.0。• 新增spring-boot-devtools(热部署)。• 新增OAuth 2的支持。• 缓存自动配置。1.4.6 Spring Boot 1.4(2017.1)

对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看Spring Boot的Github官方版本介绍,地址为https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes。• Spring更新至4.3。• Hibernate更新至5.0。• 提供新的测试模块。• Neo4J和Narayana事务管理器,Caffeine cache、Elasticsearch Jest支持。1.4.7 Spring Boot 1.5(2017.2)

对之前版本进行了修订,包括但不限于以下更新,详细版本内容可以查看Spring Boot的Github官方版本介绍,地址为https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.5-Release-Notes。• 修改了一些starter的命名。• OAuth 2资源过滤器。• 新的记录器端点。• 提供Apache Kafka、LDAP支持。1.4.8 Spring Boot 2.0(2018.3)

Spring Boot 2.x版本对Spring Boot进行了重大的改进,官网介绍如图1-4所示。该版本对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看Spring Boot的Github官方版本介绍,地址为https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes。• 基于Java 8,支持Java 9。• 支持Quartz调度程序。• 大大简化了安全自动配置。• 支持嵌入式Netty。• Tomcat、Undertow和Jetty均已支持HTTP/2。• 全新的执行器架构,支持Spring MVC、WebFlux和Jersey。• 使用Spring WebFlux/WebFlux.fn提供响应式Web编程支持。• 为各种组件的响应式编程提供了自动化配置,如Reactive Spring Data、Reactive Spring Security等。• 用于响应式Spring Data Cassandra、MongoDB、Couchbase和Redis的自动化配置和启动器POM。• 引入对Kotlin1.2.x的支持,并提供了一个runApplication函数,让你通过惯用的Kotlin来运行Spring Boot应用程序。更多信息请参阅参考文档中对Kotlin的支持部分。• 启动时的ASCII图像Spring Boot Banner现已支持GIF。图1-4 Spring Boot 2.0的改动(图片来源于Spring官网:http://spring.io/)1.5 小结

本章从多个角度带领大家了解Spring Boot,并且介绍了Spring Boot历史版本的更迭以及学习它会给我们带来的好处,内容可能略显乏味。第2章将带领大家构建开发Spring Boot的环境,让我们走进Spring Boot。第2章 走进Spring Boot

第1章介绍了Spring Boot的特点及发展历史,阅读起来可能会有一些枯燥,但是间接地映射出了尽快学习掌握Spring Boot的重要性。本章将带领大家搭建Spring Boot的开发环境,并且引领大家简单地构建项目,以及对项目的简单使用。2.1 环境搭建

正所谓“工欲善其事,必先利其器”,正如我们学习Java时一样,先要搭建环境,才能真正进行开发和部署。所以,本节将对Spring Boot的开发环境进行搭建,第一个需要安装的是JDK。当今主流的Java开发工具有Eclipse、IntelliJ IDEA、Spring Tool Suite以及MyEclipse等。本书中的实例全部使用IntelliJ IDEA作为IDE进行开发,使用Apache Maven构建项目。2.1.1 JDK安装

本书中使用的是Spring Boot 2.0.3版本,Spring Boot 2.x以上版本需要JDK 1.8以上,所以我们需要去官网下载JDK1.8以上的版本。登录官网(http://www.oracle.com/technetwork/java/javase/downloads/index.html),下载一个适合自己系统的JDK1.8安装包,然后进行安装。安装完成之后,配置一下环境变量,然后在终端或者Windows控制台(CMD)输入查看JDK版本的命令,如代码清单2-1所示。代码清单2-1 查看JDK版本 java -version

如果出现如图2-1所示的界面,就证明JDK安装成功了。图2-1 JDK安装成功查看图2.1.2 IntelliJ IDEA的安装

登录IntelliJ IDEA官网(下载地址:https://www.jetbrains.com/idea/download/),如图2-2所示,下载合适的版本,笔者使用的是2018.1版本,具体可以根据自己的情况下载,各版本之间的差异不是很大,下载完成之后安装即可(需要注意的是,IntelliJ IDEA是一款收费软件,大家可以申请免费使用一年,根据自己的喜好选择IDE)。图2-2 IntelliJ IDEA官网下载页面2.1.3 Maven的安装

Maven是一个比较常用的项目管理工具,同时提供了出色的应用程序构建能力。通常可以通过几行命令构建一个简单的应用程序。

由于本书是使用Maven构建应用的,因此我们需要安装一个Maven管理工具。通过登录Apache Maven官网(Apache Maven官网地址:https://maven.apache.org/download.cgi)下载一个3.2以上的版本,如图2-3所示。图2-3 在Apache Maven官网下载

可以根据系统下载压缩包,下载之后在本地解压,解压完成后需要配置一下Maven环境变量,配置完成后在终端或者Windows控制台(CMD)输入查看Maven版本的命令,如代码清单2-2所示。代码清单2-2 查看Maven版本 mvn -v

如果出现如图2-4所示的界面,就证明Maven环境变量配置成功了。图2-4 查看Maven环境变量

Maven环境变量到这里已经配置完成了。但是在默认情况下,Maven下载JAR可能会有一些慢,可以修改为国内阿里云等下载地址,如代码清单2-3所示,这是笔者Maven的配置(settings.xml配置),可以根据需求自行修改。2.1.4 IntelliJ IDEA内配置JDK和Maven1. 配置JDK

打开IntelliJ IDEA,在菜单栏单击Project Structure,然后在左侧单击SDKs,单击+号,选择自己刚刚安装的JDK即可,如图2-5所示。图2-5 IntelliJ IDEA配置JDK2. 配置Maven

在菜单栏单击Preferences,在搜索栏搜索maven,单击查询到的Maven,在右侧配置刚刚安装的Maven,如图2-6所示。图2-6 IntelliJ IDEA配置Maven

其中,需要配置以下三项。• Maven home directory:选择刚刚安装的Maven。• User settings file:配置安装的Maven中conf目录下的settings.xml。• Local repositroy:配置Maven下载JAR包的位置。

到这里,所有配置和搭建都已经完成了。2.2 新建Spring Boot项目

本节将介绍IntelliJ IDEA使用Spring Initializr创建Spring Boot项目。2.2.1 开始创建项目

第一次打开IntelliJ IDEA或者之前关闭了Intellij IDEA,可以看到如图2-7所示的界面,其中可以创建项目、导入项目、打开图2-7 IntelliJ IDEA欢迎界项目或者从版本管理工具内导入项目。面

如果你之前打开过项目,重新打开Intellij IDEA会默认打开上次打开的项目。当然,我们也可以在IDEA的菜单栏选择New进行创建应用的操作,如图2-8所示。图2-8 IntelliJ IDEA创建项目界面2.2.2 配置JDK版本和Initializr Service URL

打开New Project界面后,在左侧选择Spring Initializr,如图2-9所示。选择后右边会有两个选项,第一项是选择JDK版本,由于本书均采用Spring Boot 2.0.3版本,最低支持JDK1.8,因此我们选择JDK1.8。下面的Initializr Service URL是用来查询Spring Boot的当前版本和组件的网站。这两个选项配置完成之后,单击下方的Next按钮进入下一个步骤。图2-9 IntelliJ IDEA-配置JDK版本和Initializr Service URL2.2.3 配置Project Metadata信息

Project Metadata配置信息包含如下内容,如图2-10所示。• Group:项目组织的标识符。• Artifact:项目标识符。• Type:构建项目的方式,包含Maven和Gradle,这里选择Maven Project。• Language:编程语言,这里选择Java。• Packaging:启动形式,包含JAR和WAR,这里我们选择JAR。• Java Version:Java版本。• Version:项目版本号。• Name:项目名称。• Description:项目描述。• Package:实际对应Java包的结构,是main目录里Java的目录结构。图2-10 IntelliJ IDEA-配置Project Metadata信息2.2.4 配置Spring Boot版本及默认引入组件

在Spring Boot下拉框中选择当前推荐的Spring Boot版本,在下方选择要使用的组件,然后单击Next按钮,如图2-11所示。图2-11 IntelliJ IDEA-配置Spring Boot版本及默认引入组件2.2.5 配置项目名称和项目位置

在Project Name处配置项目名称,在Project Location处配置项目位置,如图2-12所示。配置完成后,单击Finish按钮即可完成项目的创建。图2-12 IntelliJ IDEA-配置项目名称和项目位置

到这里,我们已经完成了项目的创建。2.3节将对项目的目录结构等进行进一步的介绍。2.3 项目工程介绍

本节继续使用2.2节创建的项目。如图2-13所示。本节将介绍项目的工程目录结构,从图2-13中可以看到大致分为4部分。(1)Java类文件(2)资源文件(3)测试类文件(4)pom文件图2-13 IntelliJ IDEA-项目工程介绍2.3.1 Java类文件

src/main/java下用于放置Java类文件,由于这是一个新建的项目,因此目前只有一个DemoApplication类,如图2-14所示。这个类是Spring Boot应用的主程序,其中@SpringBootApplication注解用来说明这是Spring Boot应用的启动类,其中包含自动配置、包扫描等功能,main方法是启动应用的入口方法,命令行或者插件等任何方式启动,都会调用这个方法。图2-14 IntelliJ IDEA-DemoApplication类2.3.2 资源文件1. 配置文件

src/main/resources下面主要用于放置Spring Boot应用的配置文件,新建项目的时候会默认创建一个application.properties(默认是一个空文件),也可以将.properties文件修改为.yml文件,用缩进结构的键值对来进行配置。同时,配置文件可以进行一些应用需要的配置,如端口号等,后续章节会陆续介绍。2. 静态资源

src/main/resources/static下面主要放置应用的静态资源文件,如HTML、JavaScript、图片等。3. 模板文件

src/main/resources/templates下面主要放置应用的模板文件,比如使用Thymeleaf后的Thymeleaf模板文件等。2.3.3 测试类文件

src/test/java下用于放置Spring Boot测试类文件,默认会根据项目名称创建一个测试类,如图2-15所示。打开该类可以发现@SpringBootTest注解用于标明这是一个Spring Boot测试类。图2-15 IntelliJ IDEA-DemoApplicationTests类2.3.4 pom文件

项目中还包含一个pom.xml文件,这是Maven项目用于构建项目的重要组成部分。从pom文件的完整代码中可以看到新建的Spring Boot项目默认的依赖以及版本号、Java版本等,如代码清单2-4所示。2.4 运行项目

在此之前,我们已经简单地搭建了一个Spring Boot项目。接下来介绍在IntelliJ IDEA上如何运行项目。其实很简单,可以直接使用IntelliJ IDEA的Run或者Debug来启动,或者利用我们在2.3节介绍的Spring Boot主程序,直接运行主程序中的main函数来运行项目。无论采用哪一种,都可以启动项目。然后查看控制台,如图2-16所示。图2-16 Spring Boot启动Log2.5 小结

本章对Spring Boot开发环境进行了搭建,介绍了使用IntelliJ IDEA创建项目的方法和步骤,以及创建后的项目工程,最后介绍了如何在IntelliJ IDEA中运行项目。到这里可能还是有一些枯燥,但是当看到启动项目的banner时可能会焕然一新。截至目前,准备工作已经做好了,接下来将会进行真正的Spring Boot之旅。第3章 Spring Boot的Web之旅

在开发中,Web项目与我们息息相关,本章将介绍Spring Boot的Web项目,从构建简单项目、使用模板框架、WebJars等进行系统性的学习。3.1 Spring Boot的第一个Web项目

打开IntelliJ IDEA,新建一个简单的项目,过程与第2章介绍的一致。3.1.1 加入Web依赖

创建项目后,在项目的pom文件中加入Web依赖,并且导入依赖文件,如代码清单3-1所示。3.1.2 创建Controller

新建一个HelloController,在类上加入注解@RestController,了解Spring MVC的都知道,这个注解是Spring 4.0版本之后的一个注解,功能相当于@Controller与@ResponseBody两个注解的功能之和。

在HelloController内创建方法hello(),在方法上加入注解@GetMapping("/hello"),这个注解是在Spring后期推出的一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写,将HTTP Get映射到方法上。让hello()返回一个字符串“Hello, This is your first Spring Boot Web Project !”。HelloController的完整内容如代码清单3-2所示。3.1.3 测试运行

截至目前,其实简单的Web项目已经创建完成了,接下来启动项目。首先观察一下控制台,如图3-1所示,我们似乎得到几个信息:项目的端口是8080、默认使用的Web容器是Tomcat、刚刚写的hello()在控制台有所映射。图3-1 Spring Boot-Web项目启动Log

在浏览器上访问http://localhost:8080/hello,可以看到浏览器打印了我们在方法内返回的内容。 Hello , This is you first SpringBoot Web Project !

到这里,一定会有人和笔者第一次接触的时候有同样的想法。Spring Boot项目太神奇了,完全颠覆了我们对传统Web项目的认识,它没有原有的web.xml文件,只需短短的几行代码,就完成了原有Spring MVC项目的烦琐配置,甚至连配置Tomcat都不需要,直接在内部提供了Tomcat。3.2 WebFlux的使用

前面介绍了Spring Boot使用Spring MVC模式搭建一个简单的WebFlux项目,本节为大家介绍Spring Boot提供的另一种模式—— Spring WebFlux。引用Spring官网的说明,我们在第1章已经看到过,如图3-2所示。图3-2 Spring MVC与Spring WebFlux比较图

从图3-2可以看到,WebFlux是一个非阻塞的Web框架,它不再完全依赖于Servlet,而是实现了Reactive Streams规范。也就是说,可以使用响应式编程,但是并非无法运行在之前的Servlet容器上,只不过必须是在Servlet 3.1以上,并且默认推荐的是使用Netty这种异步容器。刚才我们提到了响应式编程,接下来利用响应式编程来创建一个Spring Boot WebFlux项目。3.2.1 添加WebFlux依赖

首先创建一个项目,在项目的pom文件中添加WebFlux依赖。Spring WebFlux同样支持传统Spring MVC使用注解的形式进行WebFlux跳转,同时支持函数式编程配置路由进行WebFlux跳转。传统模式就不再赘述了,这里以响应式编程为例,Spring WebFlux依赖的内容如代码清单3-3所示。3.2.2 创建一个处理方法类

新建类HelloHandle,创建一个hello方法供接下来使用,其中返回值Mono作为响应对象,其中ServerResponse包含响应状态、响应头信息等,类上面的@Component注解用于将类实例化到Spring容器中。总的来说,这个方法就是返回一句字符串,HelloHandle类的内容如代码清单3-4所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载