本达人课选用了当前 Spring Boot 最新版本 2.0.3 Release,课程文章均基于作者在实际项目中剥离出来的场景和 Demo,目标是带领学习者快速上手 Spring Boot,将 Spring Boot 相关技术点快速运用到微服务项目中。
达人课主要分为两大部分:基础篇和进阶篇。
基础篇主要介绍 Spring Boot 在项目中最常使用的功能点,旨在带领学习者快速掌握 Spring Boot 在开发时需要的知识点,能够把 Spring Boot 相关技术运用到实际项目架构中去。主要内容包括 JSON 数据封装、日志记录、属性配置、MVC 支持、在线文档、模板引擎、异常处理、AOP 处理、持久层集成等等。
进阶篇主要介绍 Spring Boot 在项目中会使用到的高级技术点,包括一些集成组件,旨在带领学习者在项目中遇到具体的场景时能够快速集成,完成对应的功能。主要内容包括拦截器、监听器、缓存、安全认证、分词插件、消息队列等等。
专家推荐“随着微服务架构的发展,Spring Boot 使用得越来越广泛。跟武哥一起学 Spring Boot 课程,帮您真正做到快速上手,将技术点切实运用到微服务项目中。”
——爱奇艺游戏事业部 高级技术经理 蒋华江
作者介绍倪升武,前华为软件开发工程师,CSDN 博客专家。毕业于同济大学,学位硕士。曾先后就职于 eBay、爱奇艺、华为。熟悉 C/C++、Java、Spring、Spring MVC、Spring Boot、Spring Cloud、Redis、MyBatis、数据结构、设计模式等等,开发过诸多大型项目,有丰富的项目经验。热爱编程,乐于分享。
课程内容 开篇词:我们为什么要学习 Spring Boot Spring Boot 是什么我们知道,从 2002 年开始,Spring 一直在飞速地发展,如今已经成为了 Java EE(Java Enterprise Edition ) 开发中真正意义上的标准。但是随着技术的发展,Java EE 使用 Spring 逐渐变得笨重起来,大量的 XML 文件存在于项目之中。繁琐的配置,整合第三方框架的配置问题,导致了开发和部署效率的降低。
2012 年 10 月,Mike Youngstrom 在 Spring Jira 中创建了一个功能请求,要求在 Spring 框架中支持无容器 Web 应用程序体系结构。他谈到了在主容器引导 Spring 容器内配置 Web 容器服务。这是 Jira 请求的摘录:
我认为,如果 Spring 的 Web 应用体系架构是从上到下利用 Spring 组件和配置模型的参考架构,那么它将被大大简化——Spring 容器可以从简单的 main() 方法中启动,并在容器中嵌入和统一常见的 Web Container 服务配置。
这一要求促成了 2013 年初开始的 Spring Boot 项目的研发。撰写本文时,Spring Boot 已经发布了 2.0.3.RELEASE 版本。Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。
它集成了大量常用的第三方库。Spring Boot 应用使用它们,无需任何配置,开箱即用(Out of the box)。即便有时需要配置,也仅需非常少量的代码(基于 Java 的配置)。这样的设计有利于开发者专注于业务逻辑的开发。
为什么学习 Spring Boot 从 Spring 官方来看我们打开 Spring 官方网站,可以看到下图:
该图显示了官方对 Spring Boot 的定位:Build Anything,即 Build 任何东西。Spring Boot 旨在实现快速地启动和运行,以及最少量的 Spring 前期配置。
接下来,我们再看下官方对后面两个的定位。
Spring Cloud:Coordinate Anything,即协调任何事情。
Spring Cloud Data Flow:Connect Everything ,即连接任何东西。
仔细品味一下,Spring 官网对 Spring Boot、Spring Cloud 和 Spring Cloud Data Flow 三者定位的措辞非常有味道,同时也可以看出,Spring 官方对这三个技术非常重视,是大家现在及今后学习的重点。
从 Spring Boot 优点来看Spring Boot 有哪些优点?主要帮我们解决了哪些问题?我们用下面这张图来说明。
- 良好的基因
Spring Boot 是伴随着 Spring 4.0 诞生的,从字面理解,Boot 是“引导”的意思,因此 Spring Boot 旨在帮助开发者快速搭建 Spring 框架。Spring Boot 继承了原有 Spring 框架的优秀基因,使 Spring 在使用中更加方便快捷。
- 简化编码
使用过 Spring 的朋友都知道,利用 Spring 创建 Web 项目,需要在 POM 文件中添加多个依赖,而 Spring Boot 则会帮助开发者快速启动一个 Web 容器。在 Spring Boot 中,我们只需要在 POM 文件中添加一个 starter-web 依赖即可,代码如下。
org.springframework.boot spring-boot-starter-web
点击进入该依赖,我们可以看到它已经包含了多个依赖,其中有之前在 Spring 工程中需要导入的依赖,我们看看其中的一部分,代码如下:
org.springframework spring-web 5.0.7.RELEASE compile org.springframework spring-webmvc 5.0.7.RELEASE compile
由此可以看出,Spring Boot 大大简化了我们的编码,我们不用一个个导入依赖,直接写一个依赖即可。
- 简化配置
Spring 虽然是 Java EE 轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱” 。各种 XML、Annotation 配置让人眼花缭乱,如果配置很多,一旦发生错误也很难找出原因。Spring Boot 更多地采用了 Java Config 的方式对 Spring 进行配置。下面看个例子。
假设我新建了一个类,但我没有使用 @Service 注解,也就是说,它是个普通类,那么我们如何让它也成为一个 Bean 并让 Spring 管理它呢?只需要 @Configuration 和 @Bean 两个注解即可,代码如下:
public class TestService { public String sayHello () { return "Hello Spring Boot!"; }}import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class JavaConfig { @Bean public TestService getTestService() { return new TestService(); }}
@Configuration 表示该类是个配置类,@Bean 表示该方法返回一个 Bean,这样就把 TestService 作为 Bean 让 Spring 去管理了。在其他地方,我们如果需要使用该 Bean ,和原来一样,直接使用 @Resource 注解注入进来即可,非常方便。
@Resourceprivate TestService testService;
另外,在部署配置方面,Spring 有多个 XML 和 Properties 需配置,在 Spring Boot 中只需要配置一个 application.yml 即可。
- 简化部署
使用 Spring 完成开发,当我们部署项目时需先在服务器上部署 Tomcat ,然后把项目打成 War 包入到 Tomcat 里。而使用 Spring Boot 后,就不再需要在服务器上部署 Tomcat 了,因为 Spring Boot 内嵌了 Tomcat,我们只需将项目打成 Jar 包,使用 java -jar xxx.jar
一键式启动项目。
另外,Spring Boot 也降低对运行环境的基本要求,环境变量中有 JDK 即可。
- 简化监控
我们可以引入 spring-boot-start-actuator 依赖,直接使用 REST 方式获取进程的运行期性能参数,从而达到监控的目的,比较方便。但 Spring Boot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,因此在微服务架构中,还需要和 Spring Cloud 配合使用。
从未来发展的趋势来看微服务是未来发展的趋势,企业项目会从传统架构慢慢转向微服务架构。微服务可以使不同的团队专注于更小范围的工作职责、使用独立的技术、更安全更频繁地部署。
Spring Boot 继承了 Spring 的优良特性,与 Spring 一脉相承,而且支持各种 REST API 的实现方,也是官方大力推荐的技术,可以看出,Spring Boot 是未来发展的一个大趋势。
本课程能学到什么本课程使用目前 Spring Boot 最新版本 2.0.3.RELEASE,课程文章均基于我在实际项目中剥离出来的场景和 Demo,目标是带领学习者快速上手 Spring Boot,将相关技术点快速运用在微服务项目中。
课程共分为两部分:基础篇和进阶篇。
基础篇(第 01~10 课)主要介绍在项目中最常使用的 Spring Boot 功能点,旨在带领学习者快速掌握 Spring Boot 开发时所需要的知识点,能够把 Spring Boot 相关技术运用到实际项目架构的搭建中。主要内容包括 JSON 数据封装、日志记录、属性配置、MVC 支持、在线文档、模板引擎、异常处理、AOP 处理、持久层集成等。
进阶篇(第 11~17 课)主要介绍在项目中会用到的 Spring Boot 更为高级的技术点,包括一些集成组件,旨在带领学习者在项目中针对遇到的具体场景实现快速集成,完成对应的功能。主要内容包括拦截器、监听器、缓存、安全认证、分词插件、消息队列等。
课程最后将带大家利用所学内容搭建一个 Spring Boot 项目的空架构,该架构也是从实际项目中剥离出来的,学习者可以将该架构运用于实际项目中,提升利用 Spring Boot 进行实际项目开发的能力。
适合阅读的人群本课程适合以下人群阅读:
- 有一定的 Java 语言基础,了解 Spring、Maven 的在校学生或自学者;
- 有传统项目经验,想往微服务方向发展的工作人员;
- 热衷于新技术并对 Spring Boot 感兴趣的人员;
- 希望了解 Spring Boot 2.0.3 的研究人员。
学习本课程需准备以下开发环境。
- 开发工具:IDEA 2017
- JDK 版本:JDK 1.8
- Spring Boot 版本:2.0.3.RELEASE
- Maven 版本:3.5.2
同时需要用到以下插件:
- Fastjson
- Swagger 2
- Thymeleaf
- MyBatis
- Redis
- ActiveMQ
- Shiro
- Lucence
参考资料
课程所有源码均可免费下载:https://gitee.com/eson15/springboot_study
第01课:Spring Boot 开发环境搭建和项目启动上一节对 Spring Boot 的特性做了概要介绍,本节课主要对 JDK 的配置、Spring Boot 工程的构建和项目的启动、Spring Boot 项目工程的结构进行讲解和分析,核心内容有:
- 配置 JDK
- 构建 Spring Boot 工程
- Spring Boot 项目的工程结构
本课程使用 IDEA 进行开发,在 IDEA 中配置 JDK 很简单,打开 File,选择 Project Structure,如下图所示:
接下来按以下步骤操作即可:
- 选择 SDKs;
- 在 JDK home path 中选择本地 JDK 的安装目录;
- 在 Name 中为 JDK 自定义名字。
通过以上步骤,即可导入本地安装的 JDK。使用 STS 或 Eclipse 的朋友,可以通过以下两步完成添加:
依次选择 Window -> Preference -> Java -> Instralled JRES,添加本地 JDK;
依次选择 Window -> Preference -> Java -> Compiler,选择 JRE,和 JDK 保持一致。
在 IDEA 中,我们可以依次选择 File -> New -> Project 快速构建 Spring Boot 工程。
接着,选择 Spring Initializr,在 Project SDK 中选择我们刚刚导入的 JDK,点击 Next,跳至项目的配置信息页,按下面提示填写即可。
- Group:填入企业域名,本课程使用 com.itcodai。
- Artifact:填入项目名称,本课程中每一课的工程名以“course+课号”命名,本文使用 course01。
- Dependencies:可以添加项目中所需要的依赖信息,大家可根据实际情况添加,本课程只需要选择 Web 即可。
我们可采用的第二种构建方式是官方构建,步骤如下。
- 访问 http://start.spring.io/。
- 在页面上输入相应的 Spring Boot 版本、Group 和 Artifact 信息及项目依赖,然后创建项目。
- 解压后,使用 IDEA 导入该 Maven 工程。操作步骤为:依次单击 File -> New -> Model from Existing Source,然后选择解压后的项目文件夹。使用 Eclipse 的朋友,可以依次单击 Import -> Existing Maven Projects -> Next,同样选择解压后的项目文件夹。
Spring Boot 项目创建完成之后,接下来需要进行 Maven 配置。
依次选择 File -> Settings,搜索“Maven”,配置本地的 Maven 信息,如下图所示:
- 在 Maven home directory 中选择本地 Maven 的安装路径;
- 在 User settings file 中选择本地 Maven 的配置文件所在路径。
我们在配置文件中配置一下国内阿里的镜像,这样在下载 Maven 依赖时,速度会很快。
nexus-aliyun * Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public
使用 Eclipse 的朋友,可以依次选择 Window -> Preference -> Maven -> User Settings 进行配置,配置方式和上面一致。
1.2.4 编码配置同样地,新建项目后,我们一般都需要配置编码,这点非常重要,很多初学者都会忘记这一步,所以要养成良好的习惯。
IDEA 中,仍然依次打开 File -> Settings,搜索“Encoding”,配置本地的编码信息,如下图所示:
使用 Eclipse 的朋友,有两个地方需要设置一下编码,设置过程如下。
- 选择 Window -> Perferences -> General -> Workspace,将 Text File Encoding 改成 UTF-8。
- 选择 Window -> Perferences -> General -> Content Types,选中 Text,在 Default Encoding 处填入 UTF-8。
OK,编码设置完成后即可启动项目工程了。
1.3 Spring Boot 项目的工程结构Spring Boot 项目总共有三个模块。
- src/main/java 路径:主要编写业务程序。
- src/main/resources 路径:存放静态文件和配置文件。
- src/test/java 路径:主要编写测试程序。
默认情况下,如上图所示,会创建一个启动类 Course01Application,该类上面有个 @SpringBootApplication 注解,该启动类中有个 main 方法。没错,Spring Boot 启动只要运行该 main 方法即可,非常方便。另外,Spring Boot 内部集成了 Tomcat,不需要我们人为手动去配置 Tomcat,开发者只需要关注具体的业务逻辑即可。
到此为止,Spring Boot 就启动成功了,为了比较清楚地看到效果,我们写个 Controller 来测试一下,代码如下:
package com.itcodai.course01.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/start")public class StartController { @RequestMapping("/springboot") public String startSpringBoot() { return "Welcome to the world of Spring Boot!"; }}
重新运行 main 方法启动项目,在浏览器中输入:localhost:8080/start/springboot。如果看到 “Welcome to the world of Spring Boot!”提示,那么恭喜你,项目启动成功!
Spring Boot 就是这么简单方便,端口号默认是 8080,如果想要修改,可以在 application.yml 文件中使用 server.port 人为指定端口,如 8001 端口:
server: port: 8001
1.4 总结
在本节课中,我们快速学习了如何在 IDEA 中导入 JDK,以及使用 IDEA 如何配置 Maven 和编码,如何快速地创建和启动 Spring Boot 工程。
IDEA 对 Spring Boot 的支持非常友好,建议大家使用 IDEA 进行 Spring Boot 的开发。
从下一节课开始,我们正式进入 Spring Boot 的学习中。
参考资料
课程源代码下载地址:https://gitee.com/eson15/springboot_study
第02课:Spring Boot 返回 JSON 数据及数据封装 第03课:Spring Boot 使用 SLF4J 进行日志记录 第04课:Spring Boot 中的项目属性配置 第05课:Spring Boot 中的 MVC 支持 第06课:Spring Boot 集成 Swagger2 展现在线接口文档 第07课:Spring Boot 集成 Thymeleaf 模板引擎 第08课:Spring Boot 中的全局异常处理 第09课:Spring Boot 中的切面 AOP 处理 第10课:Spring Boot 中集成 MyBatis 第11课:Spring Boot 中的事务配置管理 第12课:Spring Boot 中使用监听器 第13课:Spring Boot 中使用拦截器 第14课:Spring Boot 中集成 Redis 第15课:Spring Boot 中集成 ActiveMQ 第16课:Spring Boot 中集成 Shiro 第17课:Spring Boot 集成 Lucence 第18课:Spring Boot 搭建实际项目开发中的架构阅读全文: http://gitbook.cn/gitchat/column/5b3c9f35a3442272491a176a