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

本文是对《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. obj文件中的关键字

    obj文件使用的关键字 关键字 含义 v 表示本行指定一个顶点,此关键字后跟着3个单精度浮点数,分别表示该顶点的X.Y.Z坐标值 vt 表示本行指定一个纹理坐标,此关键字后跟着两个单精度浮点数,分别表 ...

  2. row_number() over partition by 分组聚合

    分组聚合,就是先分组再排序,可以的话顺手标个排名:如果不想分组也可以排名:如果不想分组同时再去重排名也可以 ROW_NUMBER() OVER( [PARTITION BY column_1, col ...

  3. JS 提取公式中的参数

    'A+B-C/D*E'.split(/[*/()+-]/)  => [A,B,C,D,E]

  4. 【awk】 判断是不是纯ascii串

    筛选出纯ascii串: awk '{ l = length($0); for (i = l; i > 0; i--) { if (substr($0,i,1) > "\177&q ...

  5. Cocos2d Box2D之浮动刚体

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. b2_kinematicBody 运动学物体在模拟环境中根据自身的速度进行移动.运动学物体自身不受力的作用.虽然用户可以手动移动它,但是通 ...

  6. Python - zipfile 乱码问题解决

    最近使用zipfile进行解包过程中遇到了很不舒服的问题,解包之后文件名是乱码的.下面进行简单总结: 首先,乱码肯定是因为解码方式不一样了,zipfile使用的是utf-8和cp437这两种编码方式, ...

  7. 高精度求A*B(FFT)

    A * B Problem Plus 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 Time Limit: 2000/1000 MS (Java/ ...

  8. 自增主键与UUID的优缺点

    自增主键 自增ID是在设计表时将id字段的值设置为自增的形式,这样当插入一行数据时无需指定id会自动根据前一字段的ID值+1进行填充.在MySQL数据库中,可通过sql语句AUTO_INCREMENT ...

  9. Hibernate4教程六:性能提升和二级缓存

    抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的元数 ...

  10. 同事遇到了一个问题(在DllMain函数之前抢控制权)

    同事有个需求,他的进程会加载一个DLL,他需要在那个DLL的DllMain函数执行之前控制DLL,修改DLL的内存. 以上工作要求全部在应用层执行. 这个其实有点悲剧. 因为这个需求其实有点坑,因为需 ...