Dev Guide / Java开发技术guide / 框架
content/dev-guide/a-Java开发技术guide/03-框架/3-springboot.md
- SpringBoot核心:约定大于配置(开发者只需遵循这些规则,就能自动获得完整功能)
- 自动配置原理:
- SpringBootApplication注解:@Configuration(标注这是一个配置类)、@EnableAutoConfiguration(开启自动配置)、@ComponentScan(组件扫描)
- @EnableAutoConfiguration做了什么:SpringBoot启动 -> 加载 spring-boot-autoconfigure.jar -> 扫描META-INF/spring.factories -> 读取EnableAutoConfiguration对应的配置类列表 -> 过滤掉不满足@Conditional条件的配置类 -> 剩余的配置类 -> 当作@Configuration加载到容器
- spring.factories文件:META-INF/spring.factories
- @Conditional注解:条件注册Bean,配置类注册之前,Spring会检查条件,满足条件才注册
- start机制:创建starter,实现自动配置类、在配置文件application.yml中配置,配置即生效
- SpringApplication启动流程:
- SpringApplication.run() -> 创建SpringApplication对象(1.推断Web应用类型:reactive / servlet / none 2.加载spring.factories的ApplicationContextInitializer 3.加载spring.factories的ApplicationListener 4.推断主启动类(从堆栈确定main所在的类)) -> run(args) -> 创建BootstrapContext(引导上下文) -> 配置Headless属性 -> 获取并运行SpringApplicationRunListener(Starting事件) -> 创建并配置Environment -> 打印Banner(启动图案) -> 创建ApplicationContext -> 准备Context:1.设置Environment 2.加载source(主配置类) 3.执行initializer 4.加载Bean定义(从@Configuration注解的类) -> 刷新Context:1.刷新容器(加载所有Bean) 2.执行BeanFactoryPostProcessor 3.自动(EnableAutoConfiguration)4.注册Listener -> 执行 Runner:ApplicationRunner、CommandLineRunner -> 发布 ApplicationReadyEvent 事件 -> 返回 ApplicationContext
- ApplicationRunnerListener: 应用刚启动starting() -> environment准备完成environmentPrepared() -> context准备完成contextPrepared() -> context加载完成contextLoaded() -> context启动完成started() -> 应用就绪ready()
- 内嵌服务器
- 自动选择机制:tomcat类存在就使用默认的tomcat, else -> Jetty -> Undertow -> 非web应用
- Actuator监控
- 常用端点: /acutor/health(健康检查)、/acutor/beans(容器中所有Bean)、/acutor/info(应用信息)、/acutor/metrics(指标数据)、/acutor/mappings(所有url映射)、/acutor/env(环境变量)
暴露端点配置:management.endpoints.web.exposure.include=,exclude=
- 异常处理
- 错误处理流程:请求到达DispatcherServlet -> HandlerExceptionResolver处理异常 -> 默认异常处理(@ExceptionHandler -> Controller内处理、@ControllerAdvice -> 全局异常处理、DefaultHandlerExceptionResolver -> Spring标准异常、ErrorMvcAutoConfiguration -> /error页面)
- ControllerAdvice全局异常处理:@RestControllerAdvice + @ExceptionHandler
- 条件注册Bean的实际应用:多数据源下的动态切换、根据环境激活不同配置