【Java架构:基础技术】一篇文章搞掂:Spring Boot

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

本文是对《Spring Boot 实战第4版》的总结,你们也能够去仔细研读该书web

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

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文件shell

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

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

$ spring run HelloController.groovyapache

这个web程序便可正常运行编程

Spring Boot的4个核心内容

自动配置bootstrap

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

例如:经过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.二、Spring Boot入门

如何建立Spring Boot项目

一、使用Spring Boot CLI(暂略)

几种安装方法:

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

二、Spring Initializr初始化Spring Boot项目

若是仍是但愿使用传统Java项目结构来开发项目,则能够采起这种方式

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

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

三、使用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的形式

2、开发一个Spring Boot应用

2.一、运用Spring Boot

一、项目结构详解

  • 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会自动检测到这个文件并应用其中的设置

二、项目构建插件

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

借助这个插件,咱们能够直接经过run便可启动项目,也能够经过这个插件把程序打包成一个jar包

2.二、使用起步依赖

一、

2.三、使用自动配置

3、自定义配置

3.一、覆盖Spring Boot自动配置

3.二、经过属性文件外置配置

3.三、定制应用程序错误页面

4、测试

4.一、集成测试自动配置

4.二、测试Web应用程序

4.三、测试运行中的应用程序

5、Groovy与Spring Boot CLI

5.一、开发SPring Boot CLI引用程序

5.二、获取依赖

5.三、用CLI运行测试

5.四、建立可部署产物

6、Spring Boot中使用Grails

6.一、使用GROM进行数据持久化

6.二、使用Groovy Server Pages定义视图

6.三、结合Spring Boot与Grails3

7、深刻Actuator

7.一、Actuator的端点

启用Actuator

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

7.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类型

二、详解自动配置

访问/actuator/autoconfig端点,这里能够某个Bean被建立或没有被建立的缘由。

三、查看配置属性

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

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

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

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

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

 

7.1.二、运行时度量

 

 

7.二、链接Actuator的远程shell

7.三、经过JMX监控应用程序

7.四、定制Actuator

7.五、保护Actuator端点

8、部署Spring Boot应用程序

8.一、衡量多种部署方式

8.二、部署到应用服务器

8.三、推上云端

相关文章
相关标签/搜索