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

本文是对《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. C#面向对象笔记

    1.面向对象核心概念 (1)类是抽象,对象是实例,new一个对象会分配一块堆空间,对象指向该空间的地址,将对象赋值给另一个对象,只是将地址赋给它,指向的是同一块空间. e.g. class Car { ...

  2. Yii2.0 for update 行级锁

    当我们遇到存在高并发并且对于数据的准确性有要求的场景,需要了解和使用for update 需要注意的点: 1.InnoDB默认是行级别的锁,当有明确指定的主键时候,是行级锁.否则是表级别 2.for ...

  3. selenium2-java 浏览器操作常用命令语法

    WebDriver driver = new ChromeDriver(); xpath定位:driver.findElement(By.xpath("//div[@id='register ...

  4. 基于Java Agent的premain方式实现方法耗时监控(转),为了找到结论执行:premain在jvm启动的时候执行,所有方法前,会执行MyAgent的premain方法

    Java Agent是依附于java应用程序并能对其字节码做相关更改的一项技术,它也是一个Jar包,但并不能独立运行,有点像寄生虫的感觉.当今的许多开源工具尤其是监控和诊断工具,很多都是基于Java ...

  5. web测试点

    一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号. 禁止直接输入特殊字符时, ...

  6. CF561做题

    C题: 一期思路:我们发现如果x,y满足条件,那么{x,-y} {-x,y} {-x,-y}也满足条件.那么我们可以只讨论|x| |y|是否满足条件,如果满足条件,那么对ans的贡献是|x|出现次数* ...

  7. vue学习 ---- 使用vue-router 进行跳转

    前提说明,在学习vue的时候,尽量的以官网的为主,而且框架本身与官方文档都是在不断迭代更新的. 在vue的框架中,目前都是使用vue-router 来进行页面跳转的,而不是<a>.先贴一个 ...

  8. 35.Unique Paths(不同的路径)

    Level:   Medium 题目描述:   A robot is located at the top-left corner of a m x n grid (marked 'Start' in ...

  9. 页面跳转到Area区域连接

    @Html.ActionLink("主页", "Index", new { controller = "Test", Action = &q ...

  10. Centos7 安装rar,unrar,zip,unzip

    1.yum 安装unrar # yum install unrar rar命令 # rar a test.rar test.jpg test.png 这条命令是将test.jpg和test.png压缩 ...