本書以Spring 5.2和Spring Boot 2.2為基礎,系統地講解了在日常企業級開發和微服務開發中面臨的大部分的問題,如函數式編程、Spring MVC、Spring Data、Spring Security、響應式編程、事件驅動、Spring Integration、Spring Batch、Spring Cloud、Kubernetes 與微服務等。本書內容由淺入深,適合有Java基礎的初級程序員學習。同時,本書還介紹了較深的理論及原理知識,可供中、高級工程師提升使用。本書講解的所有主題都附有實戰案例,讀者可快速將相關技術應用于工作實踐中。
汪云飛,開源技術專家,擁有10年以上的JavaEE開發經驗。對開源Java框架(Spring、Hibernate/JPA、Spring Boot)、開源GIS(GeoServer、OpenLayers),開源云計算解決方案(IaaS:ClouStack、OpenStack;PaaS:Apache Mesos、Deis、Docker)頗有研究。其撰寫的技術博客被大量的閱讀和轉載。
第1章 初識Spring Boot 1
1.1 Spring Boot概述 1
1.2 快速建立Spring Boot應用 2
1.2.1 安裝Java 2
1.2.2 使用Spring Initializr 2
1.2.3 第一段代碼 3
1.3 體驗Spring Boot 4
1.3.1 Spring Boot的應用結構 4
1.3.2 build.gradle 5
1.3.3 QuickStartApplication 5
1.3.4 application.properties 6
1.4 小結 6
第2章 函數式編程 7
2.1 了解函數式編程 7
2.2 Lambda表達式 7
2.2.1 了解Lambda表達式 7
2.2.2 把Lambda表達式作為參數 8
2.3 函數接口 9
2.3.1 Predicate 10
2.3.2 Function 12
2.3.3 Consumer 14
2.3.4 Supplier 14
2.3.5 Operator 15
2.3.6 Comparator 15
2.3.7 自定義函數接口 16
2.4 方法引用 16
2.4.1 構造器方法引用 16
2.4.2 靜態方法引用 17
2.4.3 實例方法引用 18
2.4.4 引用特定類的任意對象的方法 18
2.5 Stream 18
2.5.1 Stream簡介 19
2.5.2 獲得Stream 19
2.5.3 中間操作 20
2.5.4 終結操作 23
2.6 Optional 27
2.6.1 獲得Optional 28
2.6.2 Optional的用法 28
2.7 小結 29
第3章 Spring 5.X基礎 30
3.1 IoC容器 30
3.2 Spring Bean的配置 31
3.2.1 注解配置(@Component) 31
3.2.2 Java配置(@Configuration和@Bean) 31
3.2.3 依賴注入(Dependency Injection) 32
3.2.4 運行檢驗(CommandLineRunner) 37
3.2.5 Bean的Scope 38
3.2.6 Bean的生命周期 40
3.2.7 應用環境 43
3.2.8 條件配置(@Conditional) 46
3.2.9 開啟配置(@Enable*和@Import) 47
3.3 對Bean的處理(BeanPostProcessor) 53
3.4 Spring Aware容器 54
3.5 Bean之間的事件通信 57
3.6 Spring EL 59
3.7 AOP 61
3.8 注解工作原理 64
3.8.1 BeanPostProcessor 64
3.8.2 BeanFactoryPostProcessor 66
3.8.3 使用AOP 68
3.8.4 組合元注解 68
3.9 小結 68
第4章 深入Spring Boot 69
4.1 Spring Boot介紹 69
4.2 Spring Boot的“魔法” 69
4.2.1 加載自動配置 69
4.2.2 實現自動配置 71
4.3 Spring Boot的配置 73
4.3.1 應用配置 74
4.3.2 修改默認配置 76
4.3.3 外部配置 79
4.4 日志和報告 91
4.4.1 日志 91
4.4.2 報告 93
4.5 多線程任務和計劃任務 94
4.5.1 Task Executor 94
4.5.2 Task Scheduler 97
4.6 Gradle插件 99
4.6.1 依賴 99
4.6.2 Spring Boot Starter 100
4.6.3 插件任務 100
4.7 自定義Starter 100
4.7.1 包裝技術庫 101
4.7.2 Starter的結構 103
4.7.3 autoconfigure模塊 105
4.7.4 Starter模塊 107
4.7.5 使用Starter 108
4.8 Spring Boot Actuator 110
4.8.1 常用端點 110
4.8.2 自定義 119
4.8.3 使用Prometheus和Grafana監控指標 124
4.9 小結 128
第5章 Spring Web MVC 129
5.1 Spring Web MVC簡介 129
5.2 用Spring Boot學習Web MVC 129
5.2.1 核心注解 129
5.2.2 RESTful服務 130
5.2.3 @ControllerAdvice 146
5.2.4 @RestControllerAdvice 151
5.2.5 JSON定制 156
5.2.6 RestTemplate 159
5.3 Web MVC配置 161
5.3.1 Spring MVC的工作原理 161
5.3.2 配置MVC 161
5.3.3 Interceptor 162
5.3.4 Formatter 164
5.3.5 HttpMessageConverter 166
5.3.6 方法參數和返回值處理設置 169
5.3.7 初始化數據綁定設置 176
5.3.8 類型轉換原理與設置 176
5.3.9 路徑匹配和內容協商 183
5.3.10 JSON 188
5.3.11 其他外部屬性配置 189
5.4 Servlet容器 191
5.4.1 注冊Servlet、Filter和Listener 191
5.4.2 配置Servlet容器 196
5.5 異步請求 202
5.5.1 Servlet 3.0 異步返回 202
5.5.2 HTTP Streaming 206
5.5.3 HTTP/2 212
5.6 小結 214
第6章 數據訪問 215
6.1 Spring Data Repository 215
6.1.1 DDD與Spring Data Repository 215
6.1.2 查詢方法 218
6.2 關系數據庫——Spring Data JPA 218
6.2.1 JPA、Hibernate和Spring Data JPA 218
6.2.2 環境準備 218
6.2.3 自動配置 220
6.2.4 定義聚合 221
6.2.5 定義聚合Repository 224
6.2.6 查詢 226
6.2.7 事件監聽 238
6.2.8 領域事件 242
6.2.9 審計功能 245
6.2.10 Web支持 246
6.2.11 數據庫初始化 248
6.3 NoSQL——Spring Data Elasticsearch 252
6.3.1 Elascticsearch簡介 252
6.3.2 環境準備 252
6.3.3 在Spring Boot中的自動配置 253
6.3.4 定義聚合 254
6.3.5 定義聚合Repository 255
6.3.6 查詢 256
6.4 數據緩存 261
6.4.1 Spring Boot與緩存 261
6.4.2 環境準備 262
6.4.3 使用緩存注解 264
6.5 小結 266
第7章 安全控制 267
7.1 Spring Security的應用 267
7.1.1 Spring Boot的自動配置 267
7.1.2 開啟Web安全配置 268
7.1.3 定制Web安全配置 268
7.1.4 Authentication 269
7.1.5 Authorization 281
7.1.6 Spring Data集成 294
7.2 Spring Security實戰 295
7.3 OAuth 2.0 301
7.3.1 OAuth 2.0 Authorization Server 301
7.3.2 OAuth 2.0 Resource Server 310
7.3.3 OAuth 2.0 Client 317
7.4 小結 322
第8章 響應式編程 323
8.1 Project Reactor 323
8.1.1 Reactive Streams的基礎接口 323
8.1.2 Flux和Mono 325
8.2 Spring WebFlux 327
8.2.1 Spring WebFlux基礎 327
8.2.2 Spring Boot的自動配置 328
8.2.3 注解控制器 329
8.2.4 函數式端點 332
8.2.5 Spring WebFlux的配置 334
8.3 Reactive NoSQL 334
8.3.1 響應式Elasticsearch 335
8.3.2 響應式MongoDB 339
8.4 Reactive關系型數據庫:R2DBC 342
8.4.1 安裝PostgreSQL 343
8.4.2 Spring Boot的自動配置 343
8.4.3 示例 344
8.5 Reactive Spring Security 347
8.5.1 Reactive Spring Security原理 347
8.5.2 Spring Boot的自動配置 347
8.5.3 示例 348
8.6 小結 354
第9章 事件驅動 355
9.1 JMS 355
9.1.1 安裝Apache ActiveMQ Artemis 355
9.1.2 新建應用 356
9.1.3 Spring Boot的自動配置 356
9.1.4 示例 356
9.1.5 Topic和Queue 358
9.2 RabbitMQ 360
9.3 Kafka 367
9.4 Websocket 374
9.4.1 STOMP Websocket 374
9.4.2 Reactive Websocket 379
9.5 RSocket 382
9.5.1 新建應用 382
9.5.2 Spring Boot的自動配置 383
9.5.3 示例 383
9.6 小結 388
第10章 系統集成與批處理 389
10.1 Spring Integration 389
10.1.1 Spring Integration基礎 389
10.1.2 Spring Integration Java DSL 391
10.1.3 示例 392
10.2 Spring Batch 395
10.2.1 Spring Batch的流程 396
10.2.2 Spring Boot的自動配置 396
10.2.3 示例 397
10.3 小結 402
第11章 Spring Cloud與微服務 403
11.1 微服務基礎 403
11.1.1 微服務和云原生應用 403
11.1.2 領域驅動設計 404
11.2 Spring Cloud 405
11.2.1 服務發現 405
11.2.2 配置管理 408
11.2.3 同步服務交互 412
11.2.4 異步服務交互 417
11.2.5 響應式異步交互 427
11.2.6 應用網關:Spring Cloud Gateway 430
11.2.7 認證授權 433
11.3 小結 442
第12章 Kubernetes與微服務 443
12.1 Kubernetes 443
12.1.1 安裝 443
12.1.2 Kubernetes基礎知識 445
12.1.3 Helm 460
12.1.4 DevOps 463
12.1.5 安裝Jenkins 464
12.1.6 微服務示例 465
12.1.7 鏡像倉庫和Dockerfile 467
12.1.8 使用Helm打包應用 471
12.1.9 Jenkins流程 475
12.2 Service Mesh和Istio 481
12.2.1 安裝Istio 482
12.2.2 微服務示例 483
12.3 小結 490