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 使用@..@
占位符,可以调用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都在“默认”包下,这样会导致注解会扫描所有class -
14.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来run -
23.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)的beans
-
43 测试
-
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对监控和管理生产环境中的应用的支持。