Spring Boot

45 阅读2分钟

基本概念

Spring Boot与Spring Cloud有什么区别

SpringBoot是Spring快速开发框架,SpringCloud是包含一系列组件的完整的微服务框架,SpringCloud依赖于SpringBoot。

Spring Boot核心配置文件是什么?有何区别 ?

  • bootstrap(.yml或.properties):boostrap 由父ApplicationContext加载的,比applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在Spring Cloud配置就会使用这个文件。且 boostrap里面的属性不能被覆盖
  • application(.yml或.properties):由ApplicatonContext加载,用于Spring Boot项目的自动化配置。

Spring Boot项目如何热部署?

使用devtools工具来实现,但是生产环境不建议使用。

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
</dependency>

Spring Boot中如何实现定时任务?

  • Spring中的@Scheduled注解。
  • 第三方框架Quartz

Spring Boot打成的jar和普通的jar有什么区别?

  • Spring Boot项目最终打包成的jar是可执行jar,这种jar可以直接通过java -jar xxx.jar命令来运行,这种jar不可以作为普通的jar被其他项目依赖,即使依赖了也无法使用其中的类。
  • Spring Boot的jar无法被其他项目依赖,主要还是他和普通jar的结构不同。普通的jar包解压后直接就是包名,包里就是我们的代码,而Spring Boot打包成的可执行jar解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。
  • 如果非要引用,可以在pom.xml文件中增加配置,将Spring Boot项目打包成两个jar,一个可执行,一个可引用。

常用注解

Spring Boot的核心注解是哪个?它由哪几个注解组成的?

核心注解是@SpringBootApplication,主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项。

java关闭数据源自动配置功能:

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
  • @ComponentScan:Spring组件扫描。

其他常用注解

@Repository

@Service

@RestController

@ResponseBody

启动过程

SpringBoot的启动过程是怎样的?

  1. 创建定时器stopWatch并启动
  2. 获取并运行listeners[SpringApplicationRunListeners]
  3. 打印banner
  4. 创建上下文ApplicationContext(判断是否webEnvironment加载AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext)
  5. 预处理上下文(context,listeners,args-ResourceLoader加载类)
  6. 刷新上下文(refresh添加后置处理器)
  7. 再刷新上下文(sort后置处理器排序)
  8. listeners发布finish(callFinishedListener)
  9. 定时器stopWatch停止计时
  10. 打印启动日志