zoukankan      html  css  js  c++  java
  • 【Java架构:基础技术】一篇文章搞掂:Spring Boot

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

    本文是对《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、推上云端

  • 相关阅读:
    Redis持久化
    《Hadoop权威指南·大数据的存储与分析》阅读笔记(未读完)
    《redis设计与实现》第一版 阅读笔记(未看完)
    LSMTree -> SStable 初体验
    Goland实现Set操作
    使用Goland操作Redis详解
    使用Python操作Redis详解
    学习笔记
    docker技术入门与实战 第三版
    Shell(笔记)
  • 原文地址:https://www.cnblogs.com/LiveYourLife/p/9871251.html
Copyright © 2011-2022 走看看