一、是什么?

  springboot是spring开源下的可用java构架微服务的微框架,是spring组件一键式解决方案,主要是简化了spring的使用难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

二、为什么使用?

  springboot优点特别多,他能帮我们迅速搭建一个微服务项目框架,使用它项目可独立运行、配置简单、应用监控、上手容易。

三、核心配置文件有哪些?它们有什么区别?

  springboot的核心配置文件有application与bootstrap,

  对比application配置文件,bootstrap有以下几个特征:

    bootstrap由applicationContext加载,优先于application加载,

    application里面的属性不能被覆盖

  使用场景:

  application配置文件容易理解,主要用于springboot项目的初始化配置。

  bootstrap配置文件适用于以下场景:

    1.从外部资源加载属性,如使用springcloudconfig配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配制信息。

    2.一些固定的不能被覆盖的属性

    3.一些加密解密的场景

 四、springboot的配置文件有哪几种格式?它们有什么区别?

  .yml与.properties,主要书写格式不同,如下;其次是yml文件不支持@propertySource注解导入配置。

    yml:      user:name:Lena

    properties:user.name=Lena

五、核心注解是哪个?主要由哪些注解组成?

  启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

  @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

  @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:           

     @SpringBootApplication(exclude = {     DataSourceAutoConfiguration.class })。

  @ComponentScan:Spring组件扫描。

六、开启spring特性有哪几种方式?

  1.继承spring-boot-starter-parent项目

  2.导入spring-boot-dependencies项目依赖

七、需要独立的容器运行吗?

  不需要,内置了tomcat

八、运行springboot有哪几种方式?

  1.放到容器中运行

  2.使用maven/gradle插件运行

  3.执行main方法运行

九、springboot自动配置原理?

  借助springFactoriesLoader从classpath中搜寻所有META-INFO/spring.factories配置文件。并将其中对应的配置项通过反射实例化为对应的标注了@Configuration的javaConfig形式的Ioc配置容器类,然后汇总为一个并加载到当前springboot创建并使用的Ioc容器。

十、springboot目录结构是怎么样的?

  如下图是主流与推荐的目录结构,MyApplication是这个程序的入口类,入口类放在一个项目的顶层包中,而在入口类加上@SpringBootApplication注解来开启SpringBoot的各项能力,如组件配置,自动扫描等。其他类放在包的子目录中。

  

 

 十一、你如何理解springboot中的starters?

  starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,他们能快速持续的运行,都是一系列得到支持的管理传递型依赖。有了它,你可以一站式集成spring及其他技术,而不需要到处找实例代码与依赖包,例如要想使用Spring JPA技术访问数据库,只需要加入spring-boot-starter-data-jpa启动器依赖就可使用了。

十二、如何在springboot启动的时候运行一些特定代码?

   可以实现CommindLineRunner或者ApplicationRunner接口,他们都只提供了run方法,若有多个CommindLineRunner或者ApplicationRunner接口,可使用@Order注解为它们排序。

十三、Springboot有哪几种读取配置的方式?

  Springboot可以通过@PropertySource,@value,@Enviroment,@ConfigurationProperties来绑定变量。

  如果是.properties或者yaml文件,常通过@value,@configurationProperties,@Enviroment来绑定变量。

  读取指定properties文件:@PropertySource+@Value,@PropertySource+@ConfigurationProperties

十四、springboot支持哪些日志框架,默认是哪个?

  支持java util logging,log4j2,logback,如果你使用starters启动器,默认是logback。无论使用哪种日志框架,spring都支持将日志输出到控制台或者文件中。

    配置日志方式有在属性中配置(不够灵活)与自定义配置文件(更灵活)两种。根据不同的日志框架,默认加载的日志配置文件的文件名,放在资源根目录下,日志初始化在ApplicationContext创建之前,所以@PropertySources加载的配置是读取不到的,系统环境变量、Spring Environment及application,bootstrap配置文件中的信息可以读取到。

十五、springboot实现热部署有哪几种方式?

  主要有2种方式,spring loaded,springboot devtool

  在springboot实现热部署是一件容易的事,只需加入devtools配置依赖,若有特殊需求可加入自定义配置热部署,完成后,代码的修改可以自动部署并重新热启动项目。

 十六、你如何理解spring配置加载顺序?

  所有的配置都有默认的加载顺序,但spring允许我们调整这些配制来改变默认的配置行为。即“约定优先于配置”,我们将可对springboot的行为进行干预的配置方式划分为以下几种:

  命令行参数;系统环境变量;位于文件中的配置文件、位于classpath中的配置文件、固话到代码中的配置项。第一个优先级最高,逐个递减,优先级高的配置会覆盖优先级低的。

十七、springboot如何定义多套环境的配置?

  springboot可以对不同的环境或者指令读取不同的配置文件。例如有开发、测试、生产3个不同的环境,配置方式有以下3种

  在配置文件中指定:

  1.基于properties文件配置

     需要另外建立3个文件,application-dev/test/prod,3个文件中分别配置不同环境的参数。然后在application.properties中指定当前的环境spring.profile.active = test,这时候读取的就是application-test.properties.

  2.基于yml文件配置

  只需建立一个application.yaml文件就可,是推荐的方式,配置项同properties文件。

  3.在java代码中通过@profile指定当前环境

  在服务启动时通过命令指定:

  还可在启动类中写死:SpringApplication.setAdditionalProfiles方法。

十八、Springboot可以兼容老spring项目吗?

      可以,通过@ImportResource注解导入老项目配置文件

十九、保护springboot项目有哪些方法?

  在生产中使用https

  使用snyk检查你的依赖关系

  升级到最新版