sprint boot操作指南
-------------------------
作者:
Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons, Vedran Pavić, Jay Bryant, Madhura Bhave
2.0.3.RELEASE
Copyright © 2012-2018
无论任何用途,本文档全部免费
-----------------------------------
目录
I spring boot文档
1. 关于本文档
2. 帮助
3. 第一步
4. 使用spring boot
5. 学习spring boot的特性
6. 产品在生产使用
7. 高级主题
II 启动
8. 介绍spring boot
9. 系统要求
9.1 servlet容器
10. 安装spring boot
10.1 适用于java开发者的安装指令
10.1.1 maven安装
10.2 安装spring boot命令行
10.2.1 手动安装
10.2.2 快速启动spring命令行
10.3 spring boot早期版本的升级
11. 开发第一个spring boot应用
11.1 创建pom
11.2 添加类路径依赖
11.3 写代码
11.3.1 @RestController和@RequestMapping注解
11.3.2 @EnableAutoConfiguration注解
11.3.3 main方法
11.4 运行示例
11.5 创建可运行jar
12. 导读
III 使用spring boot
13. 构建系统
13.1 依赖管理
13.2 maven
13.2.1 继承启动父本
13.2.2 使用pom中没有父本的spring boot
13.2.3 使用spring boot的maven插件
13.3 启动项
14. 结构化代码
14.1 使用默认包
14.2 定位主应用类
15. 配置类
15.1 导入附加配置类
15.2 导入XML配置
16. 自动配置
16.1 逐步取代自动配置
16.2 禁用特定自动配置类
17. spring beans和依赖注入
18. 使用@SpringBootApplication注解
19. 运行应用程序
19.1 在集成开发环境中运行
19.2 打包运行应用程序
19.3 使用maven插件
19.4 热部署
20. 开发者工具
20.1 默认属性
20.2 自动重启
20.2.1 条件评估中的日志改变
20.2.2 排除项
20.2.3 查看更多路径
20.2.4 禁用重启
20.2.5 使用触发器文件
20.2.6 自定义重启类加载器
20.2.7 限制
20.3 LiveReload
20.4 全局设置
20.5 远程应用
20.5.1 运行远程客户端应用
20.5.2 远程更新
21. 将应用打包成产品
22. 导读
IV spring boot特性
23. SpringApplication
23.1 启动失败
23.2 自定义Bannar
23.3 自定义SpringApplication
23.4 流畅的建造者API
23.5 应用事件和监听器
23.6 网络环境
23.7 获取应用参数
23.8 使用ApplicationRunner或CommandLineRunner
23.9 应用退出
23.10 管理特性
24. 通用化(外部化)配置
24.1 配置随机值
24.2 添加命令行配置信息
24.3 应用配置文件
24.4 特定配置文件
24.5 配置文件中的占位符
24.6 使用YAML代替配置文件
24.6.1 现在YAML
24.6.2 在spring环境中将YAML导出为Properties配置文件
24.6.3 Multi-profile YAML文档
24.6.4 YAML的不足
24.7 类型安全的配置文件
24.7.1 第三方配置
24.7.2 轻松绑定
24.7.3 复杂类型合并
24.7.4 配置转换 转换时长
24.7.5 @ConfigurationProperties验证
24.7.6 @ConfigurationProperties vs. @Value
25. 配置文件
25.1 添加动态配置文件
25.2 以编程的方式设置配置文件
25.3 具体化配置文件
26. 日志
26.1 日志格式
26.2 控制台输出
26.2.1 彩色编码输出
26.3 文件输出
26.4 日志等级
26.5 自定义日志配置
26.6 日志配置扩展
26.6.1 具体化配置
26.6.2 环境配置
27. 开发web应用
27.1 spring web mvc框架
27.1.1 spring mvc自动配置
27.1.2 HttpMessageConverters
27.1.3 自定义json序列化和反序列化器
27.1.4 MessageCodesResolver
27.1.5 静态内容
27.1.6 欢迎页面
27.1.7 自定义图标
27.1.8 路径匹配和内容协商
27.1.9 ConfigurableWebBindingInitializer
27.1.10 模板引擎
27.1.11 错误处理
自定义错误页
将错误页映射到MVC以外
27.1.12 Spring HATEOAS
27.1.13 CORS支持
27.2 Spring WebFlux框架
27.2.1 Spring WebFlux自动配置
27.2.2 HTTP使用HttpMessageReaders和HttpMessageWriters编解码
27.2.3 静态内容
27.2.4 模板引擎
27.2.5 错误处理
自定义错误页
27.2.6 Web过滤器
27.3 JAX-RS and Jersey
27.4 嵌入式sevlet容器的支持
27.4.1 Servlets, Filters, 和 listeners
将Servlets, Filters, 和 listeners注册为bean
27.4.2 sevlet上下文初始化
扫描Servlets, Filters, 和 listeners
27.4.3 ServletWebServerApplicationContext
27.4.4 自定义嵌入式容器
编程定制
直接定制ConfigurableServletWebServerFactory
27.4.5 JSP限制
28. 安全
28.1 MVC安全
28.2 WebFlux安全
28.3 OAuth2
28.3.1 客户端
28.3.2 服务器
28.4 Actuator安全
CSRF保护
29. SQL数据库
29.1 配置数据源
29.1.1 嵌入式数据库的支持
29.1.2 连接产品数据库
29.1.3 连接JNDI数据库
29.2 使用jdbc模板
29.3 JPA和“Spring Data”
29.3.1 实体类
29.3.2 Spring Data JPA仓库
29.3.3 创建和删除JPA数据库
29.3.4 在视图中打开实体管理器
29.4 使用H2的Web控制台
29.4.1 改变H2控制台路径
29.5 使用jOOQ
29.5.1 代码生成
29.5.2 使用DSLContext
29.5.3 jOOQ SQL Dialect
29.5.4 自定义jOOQ
30. 使用NoSQL技术
30.1 Redis
30.1.1 连接redis
30.2 MongoDB
30.2.1 连接MongoDB数据库
30.2.2 MongoTemplate
30.2.3 Spring Data MongoDB仓库
30.2.4 嵌入式mongo
30.3 Neo4j
30.3.1 连接Neo4j数据库
30.3.2 使用内嵌模式
30.3.3 Neo4jSession
30.3.4 Spring Data Neo4j仓库
30.3.5 仓库示例
30.4 GemFire(类似redis)
30.5 Solr
30.5.1 连接Solr
30.5.2 Spring Data Solr仓库
30.6 Elasticsearch
30.6.1 使用Jest连接Elasticsearch
30.6.2 使用Spring Data连接Elasticsearch
30.6.3 Spring Data Elasticsearch仓库
30.7 Cassandra
30.7.1 连接Cassandra数据库
30.7.2 Spring Data Cassandra仓库
30.8 Couchbase
30.8.1 连接Couchbase
30.8.2 Spring Data Couchbase仓库
30.9 LDAP
30.9.1 连接LDAP服务器
30.9.2 Spring Data LDAP仓库
30.9.3 嵌入式内存LDAP服务器
30.10 InfluxDB
30.10.1 连接InfluxDB
31. 缓存
31.1 提供的缓存支持
31.1.1. Generic
31.1.2. JCache (JSR-107)
31.1.3. EhCache 2.x
31.1.4. Hazelcast
31.1.5. Infinispan
31.1.6. Couchbase
31.1.7. Redis
31.1.8. Caffeine
31.1.9. Simple
31.1.10. None
32. 消息传送
32.1 JMS
32.1.1. ActiveMQ支持
32.1.2. Artemis支持
32.1.3. 使用JNDI ConnectionFactory
32.1.4. 发送消息
32.1.5. 接收消息
32.2 AMQP
32.2.1. RabbitMQ支持
32.2.2. 发送消息
32.2.3. 接收消息
32.3. Apache Kafka支持
32.3.1 发送消息
32.3.2 接收消息
32.3.3 额外Kafka配置
33. 通过RestTemplate使用REST Services(以信息为中心的表述性状态转移(Representational State Transfer,REST))
33.1 RestTemplate定制
34. 通过WebClient使用REST Services
34.1 WebClient定制
35. Validation(校验)
36. 发送Email
37. 使用JTA(事物处理架构)分布式处理事物
37.1. 使用Atomikos事物管理器
37.2. 使用Bitronix事物管理器
37.3. 使用Narayana事物管理器
37.4. 使用Java EE Managed事物管理器
37.5. Mixing XA 和 Non-XA JMS 连接
37.6. 支持嵌入式事物管理器
38. Hazelcast
39. Quartz Scheduler
40. spring集成
41. Spring Session
42. 基于JMX的监控和管理
43. 测试
43.1 测试域的依赖
43.2 测试spring应用
43.3 测试spring boot应用
43.3.1. 检测web应用的类型
43.3.2. 检测测试配置
43.3.3. 排除测试配置
43.3.4. 使用running server测试
43.3.5. 使用JMX
43.3.6. 模拟和查看Beans
43.3.7. 自动配置测试
43.3.8. 自动配置json测试
43.3.9. 自动配置Spring MVC测试
43.3.10. 自动配置Spring WebFlux测试
43.3.11. 自动配置Data JPA测试
43.3.12. 自动配置 JDBC测试
43.3.13. 自动配置 jOOQ测试
43.3.14. 自动配置 Data MongoDB测试
43.3.15. 自动配置 Data Neo4j测试
43.3.16. 自动配置 Data Redis测试
43.3.17. 自动配置 Data LDAP测试
43.3.18. 自动配置 REST Clients
43.3.19. 自动配置 Spring REST Docs测试
使用模拟MVC自动配置 REST Docs测试
使用REST Assured自动配置 Spring REST Docs测试
43.3.20. 用户配置和切片
43.3.21. 使用Spock测试Spring Boot应用
43.4 测试工具
43.4.1. ConfigFileApplicationContextInitializer
43.4.2. TestPropertyValues
43.4.3. OutputCapture
43.4.4. TestRestTemplate
44. WebSockets
45. Web服务
46. 创建自己的自动配置
46.1 了解自动配置Beans
46.2 定位自动配置Candidates
46.3 条件注解
46.3.1. Class Conditions
46.3.2. Bean Conditions
46.3.3. Property Conditions
46.3.4. Resource Conditions
46.3.5. Web Application Conditions
46.3.6. SpEL Expression Conditions
46.4 测试你的自动配置
46.4.1 模拟web上下文
46.4.2 覆盖类路径
46.5 创建自己的启动项
46.5.1 命名
46.5.2 自动配置模块
46.5.3 启动模块
47. Kotlin支持
47.1. 要求
47.2. Null-safety
47.3. Kotlin API
47.3.1. 运行应用
47.3.2. 扩展
47.4. 依赖管理
47.5. @ConfigurationProperties
47.6. 测试
47.7. 资源
47.7.1. Further reading
47.7.2. 示例
48. 导读
V spring boot执行器:Production-ready features
49. 启动Production-ready features
50. 终端
50.1. 启动终端
50.2. 暴露终端
50.3. Securing HTTP Endpoints
50.4. 配置终端
50.5. 执行器Web终端的超媒体
50.6. 执行器Web终端路径
50.7. CORS支持
50.8. 实现定制终端
50.8.1. 接收输入
输入类型转换
50.8.2. 定制Web终端
Web终端请求预测
路径
HTTP方法
Consumes
Produces
Web终端返回状态
Web终端请求范围
Web终端安全
50.8.3. Servlet终端
50.8.4. Controller终端
50.9. 健康度信息
50.9.1. 自动配置HealthIndicators
50.9.2. 写入定制HealthIndicators
50.9.3. 反应性健康指示器
50.9.4. 自动配置ReactiveHealthIndicators
50.10. 应用信息
50.10.1. 自动配置InfoContributors
50.10.2. 定制应用信息
50.10.3. Git提交信息
50.10.4. 创建信息
50.10.5. 写入定制InfoContributors
51. HTTP上的监控和管理
51.1. 自定义监控终端路径
51.2. 自定义管理服务器端口
51.3. 配置管理特性(Management-specific) SSL
51.4. 自定义管理服务器地址
51.5. 禁止启用HTTP终端
52. JMX上的监控和管理
52.1. 自定义MBean名称
52.2. 禁止启用JMX终端
52.3. 在HTTP上使用JMX的Jolokia
52.3.1. 自定义Jolokia
52.3.2. 禁止启用Jolokia
53. 日志
53.1. 配置日志
54. Metrics
54.1. 启动
54.2. 监控系统支持
54.2.1. Atlas
54.2.2. Datadog
54.2.3. Ganglia
54.2.4. Graphite
54.2.5. Influx
54.2.6. JMX
54.2.7. New Relic
54.2.8. Prometheus
54.2.9. SignalFx
54.2.10. Simple
54.2.11. StatsD
54.2.12. Wavefront
54.3. Metrics支持
54.3.1. Spring MVC Metrics
54.3.2. Spring WebFlux Metrics
54.3.3. RestTemplate Metrics
54.3.4. Cache Metrics
54.3.5. DataSource Metrics
54.3.6. RabbitMQ Metrics
54.4. 注册定制metrics
54.5. 自定义自己的metrics
54.5.1. Per-meter properties
54.6. Metrics终端
55. 审计
56. HTTP轨迹追踪
56.1. 自定义HTTP轨迹追踪
57. 过程监控
57.1. 扩展配置
57.2. 以编程的方式
58. Cloud Foundry支持
58.1 禁用扩展Cloud Foundry执行器支持
58.2. Cloud Foundry自签认证(证书)
58.3. 自定义上下文路径
59. 导读
VI. 部署spring boot应用
60. 部署到云上
60.1. Cloud Foundry
60.1.1. 绑定服务
60.2. Heroku
60.3. OpenShift
60.4. Amazon Web Services (AWS)
60.4.1. AWS Elastic Beanstalk
使用Tomcat平台
使用Java SE平台
60.4.2. 总结
60.5. Boxfuse and Amazon Web Services
60.6. Google云
61. 安装Spring Boot应用
61.1. 支持的操作系统
61.2. Unix/Linux服务
61.2.1. 作为一个init.d安装(System V)
Securing an init.d服务
61.2.2. 作为一个系统服务安装
61.2.3. 自定义启动脚本
自定义写入时启动脚本
自定义运行时脚本
61.3. Microsoft Windows服务
62. 导读
VII. Spring Boot命令行(CLI)
63. 安装命令行
64. 使用命令行
64.1. 使用命令行运行应用
64.1.1. Deduced “grab” Dependencies
64.1.2. Deduced “grab” Coordinates
64.1.3. 默认导入Statements
64.1.4. Automatic Main Method
64.1.5. 自定义依赖管理
64.2. 具有多个源文件的应用程序
64.3. 打包应用程序
64.4. 初始化一个新的项目
64.5. 使用嵌入式Shell
64.6. 给命令行增加扩展
65. 使用Groovy Beans DSL开发应用
66. 使用settings.xml配置命令行
67. 导读
VIII. 创建工具插件
68. Spring Boot Maven插件
68.1. 加入Plugin
68.2. 打包可执行的Jar and War文件
69. Spring Boot Gradle插件
70. Spring Boot AntLib Module
70.1. Spring Boot Ant Tasks
70.1.1. spring-boot:exejar
70.1.2. 示例
70.2. spring-boot:findmainclass(寻找主类)
70.2.1. 示例
71. 支持其他的构建系统
71.1. 重新打包Archives
71.2. (Nested Libraries)库嵌套
71.3. 寻找主类
71.4. 重新打包实现示例
72. 导读
IX. ‘How-to’引导
73. Spring Boot应用
73.1. 创建自己的FailureAnalyzer
73.2. 自动故障检测
73.3. 启动之前自定义环境或ApplicationContext
73.4. 创建一个ApplicationContext层级(Adding a Parent or Root Context)
73.5. 创建一个Non-web Application
74. 属性和配置
74.1. 创建时自动扩展属性
74.1.1. 使用Maven自动扩展属性
74.1.2. 使用Gradle自动扩展属性
74.2. 外部化SpringApplication的配置
74.3. 改变应用外部属性配置文件的位置
74.4. 使用短命令行参数
74.5. 使用YAML作为外部属性配置文件
74.6. 设置Active Spring Profiles
74.7. 根据环境改变配置
74.8. 查找外部属性的内置选项
75. 嵌入式Web服务器
75.1. 使用另一个Web服务器
75.2. 禁用Web服务器
75.3. 改变HTTP端口
75.4. 使用随机的未占用HTTP端口
75.5. 在运行环境中查找HTTP端口
75.6. 启用HTTP响应压缩
75.7. 配置SSL
75.8. 配置HTTP/2
75.8.1. HTTP/2 with Undertow
75.8.2. HTTP/2 with Jetty
75.8.3. HTTP/2 with Tomcat
75.9. 配置Web服务器
75.10. 给应用添加一个Servlet, Filter, 或Listener
75.10.1. 通过使用Spring Bean添加Servlet, Filter, 或 Listener
禁用Servlet或Filter的注册
75.10.2. 通过类路径扫描添加Servlets, Filters, 和 Listeners
75.11. 配置访问日志
75.12. 运行在前端代理服务器之后
75.12.1. 自定义Tomcat的代理配置
75.13. 给Tomcat启用多个连接器
75.14. 使用Tomcat的LegacyCookieProcessor
75.15. Undertow启用多监听器(Listeners)
75.16. 使用@ServerEndpoint创建WebSocket终端
76. Spring MVC
76.1. 写一个JSON REST服务
76.2. 写一个XML REST服务
76.3. 自定义Jackson ObjectMapper
76.4. 自定义@ResponseBody Rendering
76.5. 处理Multipart File上传
76.6. 关闭Spring MVC DispatcherServlet
76.7. 关闭默认的MVC配置
76.8. 自定义ViewResolvers
77. Jersey
77.1. Secure Jersey终端使用Spring Security
78. HTTP客户端
78.1. 使用代理配置RestTemplate
79. 日志
79.1. 为日志配置Logback
79.1.1. 为只有文件的输出配置Logback
79.2.为日志配置Log4j
79.2.1. 使用YAML或JSON配置Log4j 2
80. 数据访问
80.1. 配置一个自定义数据源
80.2. 配置两个数据源
80.3. 使用Spring数据仓库
80.4. 从spring配置中分离出@Entity的定义
80.5. 配置JPA特性
80.6. 配置Hibernate的命名策略
80.7. 使用自定义EntityManagerFactory
80.8. 使用两个EntityManagers
80.9. 使用传统的persistence.xml文件
80.10. 使用Spring数据JPA和Mongo仓库
80.11. 暴露Spring数据仓库作为REST终端
80.12. 配置一个JPA(java持久层API)使用的组件
80.13. 配置两个数据源的jOOQ(数据库访问框架)
81. 数据库初始化
81.1. 使用JPA初始化数据库
81.2. 使用Hibernate初始化数据库
81.3. 初始化数据库
81.4. 初始化Spring Batch数据库
81.5. 使用一个高等级的数据库迁移工具
81.5.1. 启动时执行Flyway数据库迁移
81.5.2. 启动时执行Liquibase数据库迁移
82. 消息
82.1. 禁用Transacted JMS Session
83. 批量应用
83.1. 启动时执行spring批量任务
84. 执行器(actuator)
84.1. 改变执行器终端的HTTP接口或地址
84.2. 自定义白标签错误页
84.3. Sanitize sensible values
85. 安全
85.1. 关闭Spring Boot安全配置
85.2. 改变UserDetailsService和添加账号
85.3. 当运行在代理服务器之后时启用HTTPS
86. 热部署
86.1. 重载静态内容
86.2. 在不重启容器的情况下重载模板
86.2.1. Thymeleaf模板
86.2.2. FreeMarker模板
86.2.3. Groovy模板
86.3. 快速启动应用
86.4. 在不重启容器的情况下重载java类
87. 创建
87.1. 产生Build信息
87.2. 产生Git信息
87.3. 自定义依赖版本
87.4. 使用maven创建一个可执行JAR
87.5. 使用一个Spring Boot应用作为依赖
87.6. 当可执行jar运行时提取具体的库
87.7. 创建一个Non-executable JAR使用Exclusions
87.8. 远程调试一个使用maven启动的Spring Boot应用
87.9. 不使用spring-boot-antlib从Ant创建一个可执行Archive
88. 传统部署
88.1. 创建一个可部署的war包文件
88.2. 将一个已有的应用转化为Spring Boot
88.3. 在Weblogic上部署WAR
88.4. 使用Jedis代替Lettuce
X. 附件
A. 常见应用配置
B. 配置Metadata
B.1. Metadata格式
B.1.1. Group Attributes
B.1.2. Property Attributes
B.1.3. Hint Attributes
B.1.4. Repeated Metadata Items
B.2. Providing Manual Hints
B.2.1. Value Hint
B.2.2. Value Providers
Any
Class Reference
Handle As
Logger Name
Spring Bean Reference
Spring Profile Name
B.3. Generating Your Own Metadata by Using the Annotation Processor
B.3.1. Nested Properties
B.3.2. Adding Additional Metadata
C. 自动配置类
C.1. From the “spring-boot-autoconfigure” module
C.2. From the “spring-boot-actuator-autoconfigure” module
D. 测试自动配置注解
E. 可执行Jar格式
E.1. Nested JARs
E.1.1. The Executable Jar File Structure
E.1.2. The Executable War File Structure
E.2. Spring Boot’s “JarFile” Class
E.2.1. Compatibility with the Standard Java “JarFile”
E.3. Launching Executable Jars
E.3.1. Launcher Manifest
E.3.2. Exploded Archives
E.4. PropertiesLauncher Features
E.5. Executable Jar Restrictions
E.6. Alternative Single Jar Solutions
F. 依赖版本