Spring Boot是一个用于构建Spring应用程序的开发框架,它简化了Spring应用程序的配置和开发过程。以下是关于Spring Boot的5000字详解:
一、概述
Spring Boot是由Pivotal团队提供的,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。它集成了大量常用的第三方库配置,例如Redis、JPA、RabbitMQ、Quartz等等,使得在Spring Boot应用中这些第三方库几乎可以零配置的开箱即用。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者。
二、核心特性
- 自动配置:Spring Boot提供了自动配置功能,可以快速地创建一个运行良好的Spring应用程序。它集成了许多常用的第三方库和工具,并且可以根据项目需求自动配置它们。这大大简化了配置过程,提高了开发效率。
- 简化Maven配置:Spring Boot使用约定优于配置的原则,使得Maven配置更加简单。它提供了一个标准的目录结构和默认的配置文件,使得开发者可以快速地构建应用程序。
- 嵌入式Tomcat:Spring Boot支持嵌入式Tomcat服务器,使得部署应用程序更加方便。开发者不需要安装和配置Tomcat服务器,只需要将应用程序打包成WAR文件,就可以直接部署到嵌入式Tomcat服务器中。
- 简化Spring开发:Spring Boot简化了Spring开发的复杂性,使得开发者可以更加高效地开发应用程序。它提供了一些常用的注解和类,例如@SpringBootApplication、@Controller、@Service等,使得开发更加简单快捷。
- 健康检查和监控:Spring Boot提供了健康检查和监控功能,可以快速查看应用程序的运行状态。它集成了Actuator模块,提供了各种监控和诊断工具,例如JVM参数、内存使用情况、线程池等。
三、使用Spring Boot的好处
- 快速开发:Spring Boot简化了Spring应用程序的开发过程,提供了自动配置和快速开发的功能。它集成了许多常用的第三方库和工具,使得开发者可以更加高效地构建应用程序。
- 易于维护:Spring Boot将许多常用的配置项进行了默认设置,使得应用程序更加易于维护。同时,它还提供了丰富的文档和示例,使得开发者可以更加方便地解决问题。
- 可扩展性:Spring Boot的模块化设计使得应用程序易于扩展。如果需要添加新的功能或者集成其他第三方库,只需要在项目中添加相应的依赖即可。
- 安全性:Spring Boot提供了内置的安全性支持,例如CSRF保护、跨站请求伪造保护等。同时,它还集成了各种安全框架,例如Spring Security,使得应用程序更加安全可靠。
- 社区活跃:Spring Boot拥有庞大的社区和活跃的开发团队,使得开发者可以获得及时的技术支持和帮助。同时,它还提供了丰富的示例和教程,使得开发者可以快速上手并掌握其用法。
SpringBoot的启动过程。我们可以看出一个SpringBoot。入口为SpringApplication.run方法,
第二步,根据RepositoryConfigurationDelegate读取配置文件信息。初始化配置。
第三步,o.s.cloud.context.scope.GenericScope 根据配置文件信息创建bean工厂。
第四步, trationDelegate$BeanPostProcessorChecker检查bean创建是否合法。
第五步,o.s.b.w.embedded.tomcat.TomcatWebServe初始化springboot内置Tomcat容器。
第六步,w.s.c.ServletWebServerApplicationContext 创建Servlet
第七步,c.c.f.a.s.a.SpringValueProcessor 开启可访问镜像。
以下是一个springboot的加载输出日志:
2022-10-19 10:18:04.370 INFO 30268 --- [ main] cn.xxx.xxx.MXXXBusinessApplication : No active profile set, falling back to default profiles: default
2022-10-19 10:18:06.598 INFO 30268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-10-19 10:18:06.603 INFO 30268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2022-10-19 10:18:06.673 INFO 30268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 45 ms. Found 0 Redis repository interfaces.
2022-10-19 10:18:07.116 INFO 30268 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=5eafe63c-6cce-367c-afac-7da202182c04
2022-10-19 10:18:07.930 INFO 30268 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-10-19 10:18:07.934 INFO 30268 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration$ReactorDeferringLoadBalancerFilterConfig' of type [org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration$ReactorDeferringLoadBalancerFilterConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-10-19 10:18:07.936 INFO 30268 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'reactorDeferringLoadBalancerExchangeFilterFunction' of type [org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-10-19 10:18:08.842 INFO 30268 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8302 (http)
2022-10-19 10:18:08.856 INFO 30268 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-10-19 10:18:08.857 INFO 30268 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.48]
2022-10-19 10:18:09.048 INFO 30268 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-10-19 10:18:09.048 INFO 30268 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4631 ms
2022-10-19 10:18:10.574 INFO 30268 --- [ main] c.c.f.a.s.a.SpringValueProcessor : Monitoring key: keys.RSAPublicKey, beanName: userTokenUtils, method: cn.ctg.common.util.UserTokenUtils.setRasPublicKey
2022-10-19 10:18:10.574 INFO 30268 --- [ main] c.c.f.a.s.a.SpringValueProcessor : Monitoring key: keys.RSAPrivateKey, beanName: userTokenUtils, method: cn.ctg.common.util.UserTokenUtils.setRasPrivateKey
2022-10-19 10:18:10.575 INFO 30268 --- [ main] c.c.f.a.s.a.SpringValueProcessor : Monitoring key: keys.aeskey, beanName: userTokenUtils, method: cn.ctg.common.util.UserTokenUtils.setAesKey