《SpringBoot实战》读书笔记

第1章 入门

Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它,你可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功夫,甚至完全不用配置。实际上,Spring Boot的一项重要工作就是让Spring不再成为你成功路上的绊脚石。

1.1 重新认识Spring

Spring的基本需要:

  • 一个项目结构,包含Maven或者Gradle构建文件,Spring MVC和Servlet API依赖。
  • 一个web.xml文件,其中申明了Spring的DispatcherServlet。
  • 一个启用了Spring MVC的Spring配置。
  • 一个控制器类
  • 一个用于部署应用程序的Web应用服务器,比如Tomcat。

1.2 Spring Boot 精要

Spring Boot最重要的四个核心:

  • 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
  • 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
  • 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
  • Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。

Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性,以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。谢天谢地,幸好有Spring,你不用再写这些样板配置了,可以专注于应用程序的逻辑,这些才是应用程序独一无二的东西。

第2章 开发第一个应用程序

Spring Boot将Spring开发的自动化程度提升到了一个新的高度,在本章我们会看到两种新方法:起步依赖和自动配置。在项目中启用Spring不仅枯燥乏味,还让人分神,你将看到这些基础的Spring Boot特性是如何将你解放出来,让你集中精力开发应用程序的。与此同时,你会写一个很小的Spring应用程序,麻雀虽小,五脏俱全,其中会用上Spring Boot。

2.1 运用Spring Boot

可以在Spring的官网上创建一个Spring Boot项目,也可以在IDEA中创建一个Spring Boot项目。


Spring Boot项目文件结构图

这个项目的结构和Maven项目结构十分类似,只是在resources文件夹中又创建了static和templates文件夹以及application.properties和application.yml配置文件。其中static文件夹用来存放静态资源相关,如JS, CSS等,templates文件夹存放html。

  • pom.xml:Maven项目的配置文件
  • Springboot...Application:应用程序的启动引导类(bootstrap class),也是主要的Spring配置类。
  • application.properties:用于配置应用程和Spring Boot的属性。


    代码片段

@SpringBootApplication开启了Spring组件扫描和Spring Boot的自动配置功能。实际上,@SpringBootApplication将三个有用的注解组合在一起。

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

在Spring Boot的早期版本中,你需要在 ReadingListApplication 类上同时标上这三个注解,但从Spring Boot 1.2.0开始,有 @SpringBootApplication 就行了。

2.1.1 测试Spring Boot应用程序

package com.wu.springboot01helloworldquick;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot01helloworldquickApplicationTests {

    @Test
    public void contextLoads() {
    }

}

2.1.2 配置应用程序属性

在application.properties文件中可以调整Spring Boot的自动配置。还有很多其他可配置的属性,后面再说。

server.port=8081

2.2 使用起步依赖



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
         
    
    com.wu
    springboot01helloworldquick
    0.0.1-SNAPSHOT
    springboot01helloworldquick
    Demo project for Spring Boot

    
        1.8
    

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

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


使用Maven创建Spring Boot项目时,它会自动引入起步依赖,其中包含了大部分我们在实际开发中需要用到的依赖,如Servlet、JSON等。构建插件的主要功能是吧项目打包成一个可执行的超级JAR,包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能用java -jar来运行应用程序。

也许用不上某个起步依赖,在Maven中,可以使用 元素来排除传递依赖。


  org.springframework.boot
  spring-boot-starter-web
  
    
      com.fasterxml.jackson.core
    
  

又或许需要用另一个版本的库,可以直接在pom.xml中写出该依赖。Maven总是会用最近的依赖,也就是说,你在项目的构建说明文件里增加的这个依赖,会覆盖传递依赖引入的另一个依赖。


  com.fasterxml.jackson.core
  jackson-databind
  2.4.3

3 自定义配置

Spring Boot允许用户自定义配置。

3.1 覆盖 Spring Boot 自动配置

大多数情况下,自动配置的Bean刚好能满足你的需要,不需要去覆盖它们。但某些情况下,Spring Boot在自动配置时还不能很好地进行推断。
这里有个不错的例子:当你在应用程序里添加安全特性时,自动配置做得还不够好。安全配置并不是放之四海而皆准的,围绕应用程序安全有很多决策要做,Spring Boot不能替你做决定。虽然Spring Boot为安全提供了一些基本的自动配置,但是你还是需要自己覆盖一些配置以满足特定的安全要求。

3.1.1 通过配置类

在配置类上加上注解@Configuration,@Bean将方法的返回值添加到容器中,这个组件默认的id,就是方法名。

3.2 通过属性文件外置配置

Spring Boot自动配置的Bean提供了300多个用于微调的属性。当你调整设置时,只要在环境变量、Java系统属性、JNDI(Java Naming and Directory Interface)、命令行参数或者属性文件里进行指定就好了。
在命令行里运行阅读列表应用程序时,Spring Boot有一个ascii-art Banner。如果你想禁用这个Banner,可以将spring.main.show-banner 属性设置为 false 。有几种实现方式,其中之一就是在运行应用程序的命令行参数里指定:

$ java -jar readinglist-0.0.1-SNAPSHOT.jar --spring.main.show-banner=false

另一种方式是创建一个名为application.properties的文件或者YAML文件,包含如下内容:

spring.main.show-banner=false

还可以将属性设置为环境变量。举例来说,如果用的是bash或者zsh,可以用 export 命令:

$ export spring_main_show_banner=false

实际上,Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括如下几处。
(1) 命令行参数
(2) java:comp/env 里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量
(5) 随机生成的带 random.* 前缀的属性(在设置其他属性时,可以引用它们,比如${random.long} )
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过 @PropertySource 标注的属性源
(9) 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。application.properties和application.yml文件能放在以下四个位置。
(1) 外置,在相对于应用程序运行目录的/config子目录里。
(2) 外置,在应用程序运行的目录里。
(3) 内置,在config包内。
(4) 内置,在Classpath根目录。
同样,这个列表按照优先级排序。也就是说,/config子目录里application.properties会覆盖
应用程序Classpath里的application.properties中的相同属性。
此外,如果你在同一优先级位置同时有application.properties和application.yml,那么application.yml里的属性会覆盖application.properties里的属性。

3.2.1 自动配置微调

1. 禁用模板缓存

将 spring.thymeleaf.cache 设置为 false 就能禁用Thymeleaf模板缓存。
可以在application.yml中配置:

spring:
  thymeleaf:
    cache: false

2 配置嵌入式服务器

更改服务器端口:

server:
  port: 8081

使服务器提供HTTPS服务:

server:
  port: 8443
  ssl: 
    key-store: file:///path/to/mykeys.jks
    key-store-password: letmein
    key-password: letmein

3 配置日志

logging:
  path: /var/logs/
  file: BookWorm.log
  level:
    root: WARN
    org:
      springframework:
        security: DEBUG  

4 配置数据源

spring:
  datasource:
    url: jdbc:mysql://localhost/readinglist
    username: dbuser
    password: dbpass

你可能感兴趣的:(《SpringBoot实战》读书笔记)