本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新)。

本文是对《Spring Boot 实战第4版》的总结,大家也可以去仔细研读该书

注意,书中使用的Spring Boot版本并不是2.0,但是我这里的代码是基于Spring Boot2.0的,有一些地方会有出入

一、入门

1.1、Spring Boot的出现

Spring的发展与现状

  • Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品
  • Spring通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能
  • Spring虽然代码组件轻量级,但是配置是重量级的
  • Spring一开始用XML配置,一个Spring项目中需要设计大量显式XML配置
  • Spring3.0后引入Java配置,一种类型安全的可重构配置方式以替代XML,但是仍然是需要大量配置
  • 设计这些配置都需要消耗大量开发时间
  • 而且项目中依赖管理也是一个损耗开发时间的大问题

创建一个Spring Web项目的流程

  • 一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring
  • MVC和Servlet API这些依赖。
  • 一个web.xml文件(或者一个 WebApplicationInitializer 实现),其中声明了Spring
  • 的 DispatcherServlet 。
  • 一个启用了Spring MVC的Spring配置。
  • 一个控制器类,以“Hello World”响应HTTP请求。
  • 一个用于部署应用程序的Web应用服务器,比如Tomcat。

创建一个Spring Boot Web项目的例子

使用Groovy代码编写HelloWorld.groovy文件

@RestController
class HelloController {
@RequestMapping("/")
def hello() {
return "Hello World"
}
}

使用Spring Boot的命令行界面(Command Line Interface,CLI)运行

$ spring run HelloController.groovy

这个web程序即可正常运行

Spring Boot的4个核心内容

自动配置

针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置

例如:通过JDBC访问一个关系型数据库

Spring:需要手动创建JdbcTemplate Bean和DataSource Bean

Spring Boot:检测到Classpath中有JdbcTemplate,自动创建JdbcTemplate Bean

详见第二章

起步依赖

告诉Spring Boot需要什么功能,它就能引入需要的库

例如:希望用Spring MVC构造一个REST API,并将JSON(JavaScript Object Notation)作为资源表述。此外,还想运用遵循JSR-303规范的声明式校验,并使用嵌入式的Tomcat服务器来提供服务

Spring:引入至少8个依赖

  • org.springframework:spring-core
  • org.springframework:spring-web
  • org.springframework:spring-webmvc
  • com.fasterxml.jackson.core:jackson-databind
  • org.hibernate:hibernate-validator
  • org.apache.tomcat.embed:tomcat-embed-core
  • org.apache.tomcat.embed:tomcat-embed-el
  • org.apache.tomcat.embed:tomcat-embed-logging-juli

Spring Boot:引入一个起步依赖,告诉Spring Boot即将创建Web程序,Spring Boot会自动加入所需依赖

  • org.springframework.boot:spring-boot-starter-web

Spring Boot会管理好这些库之间的版本关系,不会出现不兼容的情况

命令行界面

这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建

像上面的Spring Boot项目示例代码中,代码没有import,Spring Boot CLI却能指导RequestMapping和RestController来自哪个包

CLI能检测到你使用了哪些类,它知道要向Classpath中添加哪些起步依赖才能让它运转起来。一旦那些依赖出现在Classpath中,一系列自动配置就会接踵而来,确保启用DispatcherServlet 和Spring MVC,这样控制器就能响应HTTP请求

Spring Boot CLI是Spring Boot的非必要部分,虽大大简化了开发,但是引入了一套不太常规的开发模型

如果不喜欢或者不需要这种开发模式,也可以抛弃Spring Boot的这个部分

Actuator

提供在运行时检视Spring Boot应用程序内部情况的能力,内容包括:

  • Spring应用程序上下文里配置的Bean
  • Spring Boot的自动配置做的决策
  • 应用程序取到的环境变量、系统属性、配置属性和命令行参数
  • 应用程序里线程的当前状态
  • 应用程序最近处理过的HTTP请求的追踪情况
  • 各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标

Actuator通过Web端点和shell界面向外界提供信息。如果要借助shell界面,你可以打开SSH(Secure Shell),登入运行中的应用程序,发送指令查看它的情况

根本上说,Spring Boot项目只不过是一个普通的Spring项目,只是使用了Spring Boot的起步依赖和自动配置

1.2、Spring Boot入门

如何创建Spring Boot项目

1、使用Spring Boot CLI(暂略)

几种安装方法:

  • 用下载的分发包进行安装
  • 用Groovy Environment Manager进行安装
  • 通过OS X Homebrew进行安装
  • 使用MacPorts进行安装

2、Spring Initializr初始化Spring Boot项目

如果还是希望使用传统Java项目结构来开发项目,则可以采取这种方式

Spring Initializr的几种使用方法(具体使用方法暂略):

  • 通过Web界面使用
  • 通过Spring Tool Suite使用
  • 通过IntelliJ IDEA使用
  • 使用Spring Boot CLI使用

3、使用IntelliJ IDEA中Spring Initializr创建一个Spring Boot项目的项目结构简介

实际生成的项目,也是一个普通的Spring项目

内容包括:

  • 主程序:DemoApplication.java
  • 测试程序:DemoApplicationTests.java
  • Maven依赖文件:pom.xml
    • 父依赖:spring-boot-starter-parent
    • web起步依赖:spring-boot-starter-web
    • 测试起步依赖:spring-boot-starter-test

其中:

主程序使用了@SpringBootApplication注解,使得此“普通的Spring项目”以Spring Boot的形式运行

测试程序使用了@SpringBootTest注解,使得单元测试能够支持Spring Boot的形式

二、开发一个Spring Boot应用

2.1、运用Spring Boot

1、项目结构详解

  • pom.xml:Maven构建说明文件。
  • DemoApplication.java :应用程序的启动引导类(bootstrap class),也是主要的Spring配置类。
  • application.properties :用于配置应用程序和Spring Boot的属性。
  • DemoApplicationTests.java :一个基本的集成测试类。

启动引导Spring

@SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能

实际上,@SpringBootApplication将三个有用的注解组合在了一起

  • Spring的@Configuration:标明该类使用Spring基于Java的配置。
  • Spring的@ComponentScan:启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
  • Spring Boot的@EnableAutoConfiguration:也可以称为@Abracadabra,开启Spring Boot自动配置,让你不用再写成篇的配置。

测试Spring Boot应用程序

@RunWith是指定JUnits所使用的测试运行器,所有测试都由这个运行器运行;这里指定了Spring的运行器,所以测试时可以得到Spring的上下文

@SpringBootTest是SpringBoot项目测试的注解(未有详解)

配置应用程序属性

Initializr生成了一个空的application.properties文件,这里可以配置Spring Boot自动配置的一些属性

这个文件也可以删除,但是存在时,Spring Boot会自动检测到这个文件并应用其中的设置

2、项目构建插件

当使用Gradle或Maven进行初始化项目时,所生成的构建文件中,会包含一个如spring-boot-maven-plugin的一个插件

借助这个插件,我们可以直接通过run即可启动项目,也可以通过这个插件把程序打包成一个jar包

2.2、使用起步依赖

1、

2.3、使用自动配置

三、自定义配置

3.1、覆盖Spring Boot自动配置

3.2、通过属性文件外置配置

3.3、定制应用程序错误页面

四、测试

4.1、集成测试自动配置

4.2、测试Web应用程序

4.3、测试运行中的应用程序

五、Groovy与Spring Boot CLI

5.1、开发SPring Boot CLI引用程序

5.2、获取依赖

5.3、用CLI运行测试

5.4、创建可部署产物

六、Spring Boot中使用Grails

6.1、使用GROM进行数据持久化

6.2、使用Groovy Server Pages定义视图

6.3、结合Spring Boot与Grails3

七、深入Actuator

7.1、Actuator的端点

启用Actuator

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

7.1.1、查看配置明细

1、获得Bean装配报告

访问/actuator/beans端点,这里可以查看Spring应用上下文中都有哪些Bean

每个Bean都有5类信息

  • bean:Spring应用程序上下文中的Bean名称或ID。
  • resource:.class文件的物理位置,通常是一个URL,指向构建出的JAR文件。这会随着应用程序的构建和运行方式发生变化。
  • dependencies:当前Bean注入的Bean ID列表。
  • scope:Bean的作用域(通常是单例,这也是默认作用域)。
  • type:Bean的Java类型

2、详解自动配置

访问/actuator/autoconfig端点,这里可以某个Bean被创建或没有被创建的原因。

3、查看配置属性

访问/actuator/env端点,可以查看所有环境属性以及值的来源,还有哪些属性注入了Bean

访问/actuator/env/server.port端点,最后是属性名称,可以查看某一个属性的配置属性

访问/actuator/env/configprops端点,可以查看有哪些环境属性可以设置,以及他们的值

4、生成端点到控制器的映射

访问/actuator/mappings端点,可以查看有控制器和哪些端点,以及他们的映射关系。

7.1.2、运行时度量

7.2、连接Actuator的远程shell

7.3、通过JMX监控应用程序

7.4、定制Actuator

7.5、保护Actuator端点

八、部署Spring Boot应用程序

8.1、衡量多种部署方式

8.2、部署到应用服务器

8.3、推上云端

【Java架构:基础技术】一篇文章搞掂:Spring Boot的更多相关文章

  1. Java 架构师+高并发+性能优化+Spring boot大型分布式项目实战

    视频课程内容包含: 高级 Java 架构师包含:Spring boot.Spring cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.Zer ...

  2. 【已转移】【Java架构:系统架构理论】一篇文章搞掂:RESTful

    一.定义 1.起源 来源:Roy Fielding的博士论文. 目的:理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构. 定义:一种实现软件通信的架构风格.设计风格, ...

  3. Java 集合详解 | 一篇文章解决Java 三大集合

    更好阅读体验:Java 集合详解 | 一篇文章搞定Java 三大集合 好看的皮囊像是一个个容器,有趣的灵魂像是容器里的数据.接下来讲解Java集合数据容器. 文章篇幅有点长,还请耐心阅读.如只是为了解 ...

  4. 为什么说Java程序员到了必须掌握Spring Boot的时候?

    摘要: SpringBoot的来龙去脉. 原文:为什么说 Java 程序员到了必须掌握 Spring Boot 的时候? 微信公众号:纯洁的微笑 Fundebug经授权转载,版权归原作者所有. Spr ...

  5. 图书-技术-SpringBoot:《Spring Boot 企业级应用开发实战》

    ylbtech-图书-技术-SpringBoot:<Spring Boot 企业级应用开发实战> Spring Boot 企业级应用开发实战,全书围绕如何整合以 Spring Boot 为 ...

  6. 第4章 使用 Spring Boot

    使用 Spring Boot 本部分将详细介绍如何使用Spring Boot. 这部分涵盖诸如构建系统,自动配置以及如何运行应用程序等主题. 我们还介绍了一些Spring Boot的最佳实践(best ...

  7. 阿里架构师的这一份Spring boot使用心得:网友看到都收藏了

    阿里架构师的这一份Spring boot使用心得: 这一份PDF将从Spring Boot的出现开始讲起,到基本的环境搭建,进而对Spring的IOC及AOP进行详细讲解.以此作为理论基础,接着进行数 ...

  8. 峰哥说技术:06-手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 06  峰哥说技术:手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理 Sp ...

  9. 【已转移】【Java架构:基础技术】一篇文章搞掂:Spring

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文是对<SPRING实战第4版>的总结,大家也可以去仔细研读该书 [------------------------ ...

  10. 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...

随机推荐

  1. BZOJ 2806: [Ctsc2012]Cheat(单调队列优化dp+后缀自动机)

    传送门 解题思路 肯定先要建出来广义后缀自动机.刚开始以为是个二分+贪心,写了一下结果\(20\)分.说一下正解,首先显然\(L_0\)具有单调性,是可以二分的.考虑二分后怎样判合法,对于分割序列很容 ...

  2. 【靶场练习_upload-labs复现】Pass01-020

    文件上传本是要命,挂马成功率更是随缘,我太难了Orz Pass-01:JS <?php phpinfo();?> 1.函数重写: 2.禁用js: Pass-02:MIME Type 修改M ...

  3. 后端技术杂谈4:Elasticsearch与solr入门实践

    阮一峰:全文搜索引擎 Elasticsearch 入门教程 作者:阮一峰 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://g ...

  4. linux设备驱动第一篇:设备驱动程序简介

    首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设 ...

  5. php与js互相调用

    php中调用js <?php echo '<script>var yearid=$("#yearId").val()</script>'; echo ...

  6. 取余运算 C和python的区别

    今天看书发现python与C的负数取余运算结果不同,查资料理解. 取余运算的算法是相同的  r = a- n*(a/n)   n!=0 r是余数,a是被除数,n是除数.n不能为0,否则都会报错. 负数 ...

  7. 抓包工具fiddler下载配置(三):手机设置代理

      前言 本篇仅讲解了手机端如何设置代理,是[抓包工具fiddler下载配置(一):下载/安装&信任证书]的后续文章,未下载安装抓包工具的需先参考文章[抓包工具fiddler下载配置(一):下 ...

  8. 利用程序随机构造N个已解答的数独棋盘

    高级软件工程第二次作业:利用程序随机构造N个已解答的数独棋盘,代码如下: package SudokuGame; /** * 解决这个问题使用的是回溯+剪枝的算法 * 基本思想:不断地将每个格子可填入 ...

  9. poj3468 A Simple Problem with Integers (树状数组做法)

    题目传送门 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 1 ...

  10. 第八组Postmortem事后分析

    第八组Postmortem事后分析 一.团队成员总结的改进和教训 隆晋威:Beta阶段完善架构设计,分工更加明确,文档更丰富,交流带来开销减少.Alpha技术选型不固定,分工混乱,没有方便的测试引擎, ...