文章目录
0 Spring Boot
前言
- 主要是作为个人笔记, 特别熟练知识的可能会无意识跳过或者淡化. 大多数是有用的文字.
- 一些可以复用的章节, 例如各种配置的章节, 其实是可以在标题上加★来标识的.
- 借鉴B站狂神老师和尚硅谷雷老师的课程, 源于官方文档
Document Directory
- 是官网文档标题目录
水平暂时远做不到翻译文档, 就把官方文档的目录拿来学习一下英语
version 2.2.0
- Spring Boot Documentation
- About the Documentation
- Getting Help
- First Steps
- Wording with Spring Boot
- Learning about Spring Boot Features
- Moving to Production
- Advanced Topics
- Getting Started
- Introducing Spring Boot
- System Requirements
- Installing Spring Boot
- Developing Your First Spring Boot Application
- What to Read Next
- Using Spring Boot
- Build Systems
- Structuring Your Code
- Configuration Classes
- Auto-configuration
- Spring Beans and Dependendy Injection
- Using the @SpringBootApplicatior Annotation
- Running Your Application
- Developer Tools
- Packaging Your Application for Production
- What to Read Next
- Spring Boot Features
- SpringApplication
- Externalized Configuration
- Profiles
- Logging
- Internationalization
- JSON
- Developing Web Applications
- RSocket
- Security
- Working with SQL Databases
- Wording with NoSQL Technologies
- Caching
- Messaging
- Calling REST Services with RestTemplate
- Calling REST Services with WebClient
- Validation
- Sending Email
- Distributed
- hazelcast
- Quartz Scheduler
- Task Execution and Scheduling
- Spring Integration
- Spring Session
- Monitoring and Management over JMX
- Testing
- WebSockets
- Web Services
- Creating Your Own Auto-configuration
- Kotlin support
- What to Read Next
- Spring Boot Actuator: Production-ready Features
- Enabling Production-ready Features
- Endpoints
- Mnitoring and Management over HTTP
- Monitoring and Management over JMX
- Loggers
- Metrics
- Auditing
- HTTP Tracing
- Process Monitoring Cloud Foundry Support
- What to Read Next
- Deploying Spring Boot Applications
- Deploying to the Cloud
- Installing Spring Boot Applications
- What to Read Next
- Spring Boot CLI
- Installing the CLI
- Using the CLI
- Developing Applications with the Groovy Beans DSL
- Configuring the CLI with settings.xml
- What to Read Next
- Build Tool Plugins
- Spring Boot Maven Plugin
- Spring Boot Gradle Plugin
- Spirng Boot AntLib Module
- Supporting Other Build Systems
- What to Read Next
- “How-to” Guides
- Spring Boot Application
- Properties and Configuration
- Embedded Web Servers
- Spring MVC
- Testing With Spring Security
- Jersey
- HTTP Clients
- Logging
- Data Access
- Database Initialization
- Messaging
- Batch Applications
- Actuator
- Security
- Hot Swapping
- Build
- Traditional Deployment
- Appendices
知识结构
根据课程整理知识结构
- Overview
- Configuration
- Log
- Web
- Docker
- Data Access
- 启动配置原理
- 自定义starter
- Cache (以下高级)
- 消息中间件
- 检索
- 任务
- 安全
- 分布式
- 开发热部署
- 监控 (运维)
1 Overview
1.1 Introduce
Spring
为了解决企业级应用开发的复杂性而创建的框架, 可大幅简化开发
通过以下关键策略实现的简化:
- 基于POJO, 轻量级最小侵入性编程 (对扩展开放)
- IoC,DI和面向接口, 实现松耦合
- 基于AOP实现声明式编程
- 通过AOP和template(模板), 减少样式代码 (这点其实体会不够深)
SpringBoot
-
用于简化Spring开发的框架
-
整个Spring技术栈的大整合
-
J2EE开发一站式解决方案
优点
- 快速创建+独立运行+易与主流工具集成 (其它主流框架) 的Spring项目
- 使用"嵌入式Servlet容器", 无需打成
.war
包 starter
自动依赖和版本管理 (控制)- 大量"自动配置", 也可手动修改
- 无需配置XML, 无代码生成, “开箱即用”
- “运行时应用监控”, 准生产环境的
- 与云计算天然集成
缺点
- 入门容易, 精通难. 所以必须懂老Spring
个人认识
- springcloud之后可能慢慢需要关注"服务网格"
- “约定大于配置”, 不光要欢呼避免了配置, 同时也意味着约定也会变得更严格.
- 一些鸡汤讲到, 不能光会"使用工具", 而忽视代码能力
微服务
架构演变:
from Dubbo Document
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySEpDbyc-1587907368465)(SpringBoot.assets/image-20200423161837334.png)]
概念
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.
-
2014, Martin Fowler提出概念
-
是一种架构的风格, 一个应用可以是一组小型服务, 彼此通过轻量级的例如HTTP方式沟通
-
每一个功能元素
1.2 快速上手
Hello World
学习环境
jdk 1.8 | maven 3.x | SpringBoot 1.5.9
maven的settings.xml中添加, 按照jdk1.8编译
传统步骤
-
新建普通maven
-
添加parent标签和web起步依赖
<parent> 官网文档起步可以找到 </parent> <dependencies> <depen></depen> </dependencies>
-
主程序类, org.zhangcl
@SpringBootApplication // 标注主程序类, 说明这是一个SpringBoot应用 public class HelloWorldMainApplication{ public static void main(Strring[] args){ SpringApplication.run(HelloWorldMainApplication.class, args); } }
-
业务org.zhangcl.controller.HelloController.java
@Controller public class HelloController{ @RequestMapping @ResponseBody public String hello(){ return "Hello, World!"; } }
部署
以前war包, 要在tomcat中, 但boot可以直接jar包
-
引入打包插件
<build> <plugins> <plugin> ... </plugin> </plugins> </build>
-
使用Maven工具中有package功能
包中有内嵌的tomcat
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
parent
是SpringBoot的版本仲裁中心
它的父项目是<artifactId>spring-boot-dependencies<artifactId/>
- 管理各个可整合组件 (依赖) 的版本!
-
导入这些依赖不需要写版本
-
spring-boot-starter-parent-1.5.9.RELEASE.pom, Ctrl+鼠标, 看parent, 能进来此文件. 其中管理很多重要内容, 如:
- 很多依赖jar的版本号的仓库, 所以我们引入很多依赖不需要手动指定版本号
- 过滤器对不同命名类型配置文件的过滤设置
-
没有管理的依赖仍然需要手动规定版本号
-
starters 场景启动器
spring-boot-starter-web, "SpringBoot场景启动器"
web, 帮我们导入web模块正常运行所依赖的组件
SpringBoot将所有的功能场景抽取出来, 做成很多starters, 我们只需要在项目里引入这些starter项目场景的, 相关依赖回自动导入进来.
要用什么功能呢, 就导入对应场景启动器
1.3 自动配置-原理1
主启动类HelloApplication.java
@SpringBootApplication
- 注解标注在某个类上, 说明是主启动类
@SpringBootApplication内部结构
纯结构
- @SpringBootConfiguration
- @Configuration()
- @EnableAutoConfiguration
- @AutoConfigurationPackage
- @Import(AutoConfigurationPackages.Registrar.class)
- AutoConfigurationImportSelector
List<String> getCandidateConfigurations(...)
- AutoConfigurationImportSelector
- @Import(AutoConfigurationPackages.Registrar.class)
- @Import(AutoConfigu
- @AutoConfigurationPackage