Part 1 (1-7)
对Spring Boot 的简短介绍,提供整个文档的一份快速阅读的地图,使用起来方便查找
Part 2 (8-12)
开始使用
8 一些好处的介绍
9 环境要求
10 安装手册
11 第一个springboot项目step-by-step
11.1 第一步 pom.xml要怎么写
这里使用继承spring-boot-starter-parent项目的pom文件的方式、然后声明了一些依赖仓库与插件仓库11.2 向Classpath中添加依赖
这里介绍了可以忽略版本号的依赖管理方式,是因为继承上述pom文件里面继承了spring.io,它会给出我们最合适的版本。11.3 书写必要的java代码
这里出现了三个注解@RestController
、@EnableAutoConfiguration
、@RequestMapping
和一个静态方法SpringApplication.run
下面的章节做点简单解释11.3.1 解释
@RestController
和@RequestMapping
,这俩都是springmvc的注解11.3.2 解释
这个注解是让springboot根据你的依赖猜想你一般会如何配置bean,比如你添加了一个spring-boot-starter-web 的依赖,使用这个注解就自动配置一个web项目@EnableAutoConfiguration
接下来又解释了所有官方Starters都能很好的被自动配置,但不仅仅只有官方Starters能被自动配置。11.3.3 解释main方法
这里的main方法就是传统java程序的main方法,通过调用SpringApplication的静态方法run来启动springboot项目
11.4 跑一跑项目
11.5 打包可执行jar
把所有Classpath中依赖+源代码都打包起来,在没有springboot的时候一般用uber这么干,现在可以直接在pom里面
12 接下来需要阅读什么
Part 3 以上都是start-guide,这里开始介绍使用方法(13-22)
13 构建工具广告
13.1 依赖管理
就是告诉你springboot帮你管理了大部分的依赖版本,你只需要声明依赖不用管版本,springboot会替你挑选合适版本,因为他们有一份BOM。13.2 介绍用maven构建springboot项目
先介绍了一些继承spring-boot-starter-parent所提供的特性,注:在Spring配置文件中(properties文件或yml文件)支持占位符${...}
,但是macen filtering 使用@[email protected]
占位符,可以调用Maven属性resource.delimiter
来重写之13.3 Gradle如何使用Springboot
这里直接贴出了链接,Spring Boot’s Gradle plugin的文档13.4 Ant如何使用
13.5 介绍Starters
这里还介绍了starter的命名格式(如果自己写starter的话)、分三类介绍了常用的starters。
14 代码如何组织
14.1 给出包结构的规范
不要声明包,不声明包会导致所有class都在“默认”包下,这样会导致注解会扫描所有class14.2 Main Application Class 的位置
如果使用推荐的位置,则可以使相应的注解免去配置,不然需要配置相应注解
15 配置类的介绍
springboot支持使用java代码来配置,属于配置文件的类需要@Configuration
来修饰15.1 导入增加的配置类
配置类不必每一个都使用@Configuration
来修饰,也可以使用@Import
来批量导入增加的配置类,还可以使用@ComponentScan
注解来扫描Spring组件,包括配置类15.2 xml配置
16 自动配置
只需要添加一个@EnableAutoConfiguration
就自动认为对@Configuration
配置类自动配置16.1 替代自动配置
如果在配置类中配置了自己的bean,那么自动配置的相同作用的bean就会被替代(不过有些bean是自己写的,spring也不知道是不是同一种,这种替代只针对常用的依赖,所以还是需要手动排除一下)16.2 排除特定的自动配置类
通过定义自动配置注解的属性,如
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
17 Spring Beans 和 依赖注入
使用@ComponentScan
注解来扫描对应的包发现beans,使用@Autowired
(构造器注入的方式)来自动装配bean,如果使用推荐的结构组织代码,则可以免去对@ComponentScan
注解属性的配置,如果一个bean只有一个构造器,那么@Autowired
也可以省略掉18 使用 @SpringBootApplication注解
使用@SpringBootApplication
相当于同时使用@Configuration
、@EnableAutoConfiguration
、@ComponentScan
这三个注解,注解配置为默认,同时该注解也提供对@EnableAutoConfiguration
、@ComponentScan
的个性化配置19 运行应用
19.1 从IDE来运行、调试
19.2 打包为jar运行、调试
19.3 使用Maven插件来运行、调试
19.4 使用Gradle插件来运行、调试
19.5 热部署
SpringBoot应用本质上是一个java应用,所以其热部署本质上是jvm的热部署,也就是在运行时替换相应的字节码来实现热部署,这里提到了一种完善的解决方案:JRebel。而spring提供的解决方案是spring-boot-devtools
,实现quick restarts式的热部署
20 开发者工具,指
使用这个工具需要先引入依赖项spring-boot-devtools
20.1 项目属性的默认值
这里主要讲有一些默认属性如springMVC提供HTTP缓存,这个缓存可以在application.properties
中配置,开发的时候并不希望缓存被使用,spring-boot-devtools
会自动应用开发时配置。20.2 自动restart
spring-boot-devtools
会自动restart项目,这里还介绍了自动restart的条件,以及restart与reload技术上的区别,restart技术是使用两个类加载器实现,正在开发的类所使用的类加载器替换掉之前的类加载器,而reload是重新加载这个类的字节码20.2.1 改变日志配置
每次restart都会写一份日志,这里介绍如何关闭这个日志20.2.2 排除资源文件
排除restart不需要关注的目录20.2.3 不在Classpath中的文件发生改变,如何restart
20.2.4 取消restart
20.2.5 触发器文件使用方法
触发器文件,Trigger File。用来使项目在特定条件下restart,而不是改变一点源码就restart,这样可以避免使用IDE时持续编译正在编写的文件时造成项目不断restart的尴尬。20.2.6 定制自己的Restart Classloader
20.2.7 使用restart的限制
就是反序列化对象时要使用spring的ConfigurableObjectInputStream
而不能使用ObjectInputStream
,很多第三方的类库反序列化时咩有考虑到context classloader
,所以会出问题.
20.3 自动刷新页面
20.4
spring-boot-devtools
的全局设置20.5
spring-boot-devtools
还能对远程应用进行操作= =这么吊
21 为生产环境而打包
22 这一部分结束了,接下来该阅读的
Part 4 springboot的特性(23-47)
23 SpringApplication
启动时显示banner+log,非常炫酷 = =...23.1 启动失败提示
23.2 定制banner
23.3 定制SpringApplication
简单说就是使用特定的SpringApplication来run23.4 SpringApplication的构建者模式的API
23.5 Application的事件和监听者
有些listener可以被注册成为Bean,但这需要这些listener监听的事件发生在ApplicationContext初始化完成之后。如果这些listener不能被配置为bean,就需要看看这里了。23.6 web环境
这里介绍了两种ApplicationContext
,分别是AnnotationConfigApplicationContext
和AnnotationConfigServletWebServerApplicationContext
23.7 访问Application Arguments
如果想访问传递给SpringApplication.run(…)
方法的Arguments,可以注入一个org.springframework.boot.ApplicationArguments
Bean,可以对命令行选项进行访问。23.8 使用ApplicationRunner和CommandLineRunner
在SpringApplication.run(…)
方法执行后,让程序执行一次代码。通过实现ApplicationRunner or CommandLineRunner
接口来实现。这俩区别就在于对命令行选项的访问方式不同。23.9 Application退出
退出的方法也是可编程的23.10 应用管理功能
24 外部配置
外部配置有很多种的方式,这一节比较有用24.1 配置随机值
这种配置有利于测试24.2 访问命令行属性
24.3 Application Property文件
SpringApplication会加载这些文件并把配置载入Environment
24.4 特定配置(Profile-specific)的属性
24.5 属性中的占位符
24.6 使用YAML代替Properties
24.6.1 加载YAML的方式、以及YAML基本写法
24.6.2 将YAML向Properties一样暴露给Environment的方式
24.6.3 多配置YAML文档
根据处于活动状态的指定配置文件的不同,一个属性可以在YAML中被配置多次24.6.4 YAML的缺点
就是无法用@PropertySource
注解加载24.6.5 合并YAML列表
就是当指定配置文件处于活动状态时,让指定配置文件的同名List覆盖掉默认配置文件中的List
24.7 类型安全的属性配置
主要介绍@ConfigurationProperties
注解的使用,使用该注解可以免去每个属性都用@Value
的繁琐配置,并且这两个注解还有其他区别,以及配置文件可以被注册为一个bean,这些都在这一节阐述24.7.1 第三方的配置,就是@Bean注解的使用
24.7.2 宽松的属性绑定方式,属性名称不一定要完全匹配
24.7.3 属性转换,就是自定义属性的类型转换方式
24.7.4 @ConfigurationProperties验证,对属性做验证,比如验证其非空
24.7.5
@ConfigurationProperties
和@Value
的对比@Value
是核心容器里面的功能,与类型安全(type-safe)配置不同,没有其宽松的绑定方式和元数据支持,但是却有后者没有的SpEL表达式支持
25 配置文件
前面说到指定配置文件,在这一节对指定配置文件有详细介绍。spring可以将配置文件分隔开使不同的配置文件在特定的环境中发挥作用,比如生产环境的配置文件在生产环境中起作用。@Profile
注解就是用来标注当前配置类是那个配置文件Part。使用属性spring.profiles.active
可以指定处于活动状态的配置文件Part有哪些。25.1 添加活动状态的配置文件
spring.profiles.active
这个项目属性和其他属性一样遵守属性的优先级规则25.2 设置配置文件的API
25.3 指定配置文件
26 日志
27 开发web应用
27.1 Spring Web MVC框架
27.1.1 Spring MVC自动配置
这是springboot为springMVC提供的自动配置27.1.2 HttpMessageConverters
SpringMVC使用HttpMessageConverter
接口转换HTTP请求和响应27.1.3 自定义JSON序列化器和反序列化器
27.1.4 MessageCodesResolver
从绑定的errors产生用来渲染错误信息的错误码,springboot有一个默认的实现27.1.5 静态内容
27.1.6 欢迎页
27.1.7 定制图标
27.1.8 可定制化ConfigurableWebBindingInitializer
27.1.9 模板引擎
这边的注意很有用----注:IntelliJ IDEA根据你运行应用的方式会对classpath进行不同的排序。在IDE里通过main方法运行应用,跟从Maven,或Gradle,或打包好的jar中运行相比会导致不同的顺序,这可能导致Spring Boot不能从classpath下成功地找到模板。如果遇到这个问题,你可以在IDE里重新对classpath进行排序,将模块的类和资源放到第一位。或者,你可以配置模块的前缀为classpath*:/templates/,这样会查找classpath下的所有模板目录。27.1.10 错误处理
27.1.11 Spring HATEOAS
27.1.12 跨域资源共享CORS支持
27.2 Spring WebFlux框架
27.3 JAX-RS和Jersey
27.4 内嵌servlet容器支持
28 安全
29 使用关系型数据库
30 使用NoSQL技术
30.1 Redis
30.2 MongoDB
30.3 Neo4j图数据库
30.4 Gemfire 一个高性能分布式内存对象缓存系统
30.5 Solr
使用Java基于Lucene开发的全文检索服务;是一个独立的企业级搜索应用服务器;lucene是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。30.6 Elasticsearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。30.7 Cassandra
Apache Cassandra是一套开源分布式数据库管理系统,混合型非关系数据库30.8 Couchbase
还是一个数据库30.9 LDAP
LDAP (轻型目录访问协议)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。30.10 InfluxDB
时间序列数据库
31 Caching, spring支持方法缓存
32 消息
spring框架对继承消息中间件(消息系统)提供强大支持32.1 JMS
javax.jms.ConnectionFactory接口提供标准的用于创建javax.jms.Connection的方法,javax.jms.Connection用于和JMS代理(消息中间件)交互32.2 AMQP
高级消息队列协议(AMQP)是一个用于消息中间件的,平台无关的,线路级(wire-level)协议32.3 Apache Kafka(一个开源消息系统)
33 调用远程rest服务by
RestTemplate
34 调用远程rest服务by
WebClient
35 验证
JSR-303是一个验证标准,类路径上存在JSR-303实现(比如Hibernate validator),Bean Validation1.1支持的方法验证特性就会自动启用。这允许bean方法的参数和/或者返回值,被标注为javax.validation约束。也就是说对bean的方法参数与返回值进行验证36 发送邮件
37 使用JTA处理分布式事务
38 Hazelcast
Hazelcast 使得 Java 程序员更容易开发分布式计算系统,可以为基于jvm环境运行的各种应用提供分布式集群和分布式缓存服务:分布式”、“集群服务”、“网格式内存数据”、“分布式缓存“、“弹性可伸缩服务”39 Quartz Scheduler
Quartz调度器,定时任务.40 Spring Integration
spring集成41 Spring Session
42 基于JMX的监控和管理
ava管理扩展(JMX)提供了一个标准的用于监控和管理应用的机制。默认情况下,Spring Boot将创建一个id为‘mbeanServer’的MBeanServer,并导出任何被Spring JMX注解(@ManagedResource,@ManagedAttribute,@ManagedOperation)的beans43 测试
44 WebSockets
Spring Boot为内嵌的Tomcat(8和7),Jetty 9和Undertow提供WebSockets自动配置45 Web Services
46 创建自己的auto-configuration
这个在开发library时比较管用47 What to Read Next
Part 5 Spring Boot Actuator
这部分讲述spring对监控和管理生产环境中的应用的支持。