目录
1. 什么是SpringBoot?有什么优点?
2. 什么是约定大于配置?
3.SpringBoot Starter实现热部署的方式?
4. 什么是yaml?有什么优势?
5. SpringBoot项目启动时做了些什么(启动流程)?
6. SpringBoot启动时自动配置的原理?
7. Spring Boot中的starter是什么?有什么优点?
8. SpringBoot核心配置文件是什么?bootstrap.properties和application.properties区别?
9. Spring Boot项目打的jar包和普通的jar有什么区别?
10. SpringBoot如何实现定时任务?
11. SpringBoot性能如何优化?
12. 如何实现SpringBoot项目的安全性?
13. 比较一下SpringSecurity和Shiro的优缺点?
14. SpringBoot是否可以使用XML配置?
15. SpringBoot事务管理的基本流程
16. SpringBoot如何定义多套不同环境配置?
17. 什么是Swagger
SpringBoot是一个基于Spring框架的快速开发框架,它采用约定大于配置,自动装配的方式,可以快速地创建独立的,生产级别的,基于Spring的应用程序。
相比于传统的Spring框架,SpringBoot更加简单易用,它将大量常见的配置和依赖项内置到框架,开发人员可以快速搭建一个完整的应用程序,无需手动配置复杂的XML文件或Java代码。SpringBoot还支持集成其他流行的框架和技术等。
约定大于配置是一种软件开发理念,它的核心思想是:通过建立约定,默认值和惯例,减少编程中需要做出的决策,提高开发效率和生产力。
例如在SpringBoot种,默认按照一定的命名规则查找数据库连接,bean定义等相关内容,这样开发人员就可以省略大量的配置和代码,直接使用默认的约定和规则来完成开发任务,从而提高开发效率和代码质量。
总的来说,约定大于配置是一种软件开发的优化策略,通过建立约定和默认值,帮助开发人员快速构建和维护高质量的应用程序,减少出错的可能性,提高开发效率和生产力。
YAML是一种轻量级的数据序列化格式,采用缩进的方式表示复杂的数据结构,易读,易写,易扩展。被广泛应用于配置文件,数据交换和其他场景。
SpringBoot 启动时会从类路径下的 META-INF/spring.factories
中获取 EnableAutoConfiguration
指定的值。
Spring Boot 将这些值作为自动配置类导入容器,并使它们生效,帮我们进行自动配置工作。
整个 J2EE 的整体解决方案和自动配置都在 spring-boot-autoconfigure
的 jar 包中。
它会给容器中导入非常多的自动配置类(xxxAutoConfiguration
),就是给容器中导入这个场景需要的所有组件,并配置好这些组件。
有了自动配置类,就免去了我们手动编写配置注入功能组件等的工作,可以大大提高开发的效率和降低出错的风险。同时,这些自动配置类还提供了很多默认值,可以充分利用 Spring Boot 的约定大于配置的特点,让我们的开发更加简单和高效。
注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass就是自动装配的核心。
@EnableAutoConfiguration给容器导入META-INF/spring-factories里定义的自动配置类。
每个自动配置类结合对应的xxxProperties.java读取配置文件进行自动配置功能。
在SpringBoot种,Starter是一种Maven依赖项集合,可以方便地引入一组相关的依赖项来支持某种特定的功能。
SpringBootStarter命名规则通常是spring-boot-starter-*,其中 * 表示某种包括技术,模块或服务等
例如:spring-boot-starter-web就是一个web应用程序所需要的基本依赖项集合,包含了SpringMVC,Tomcat和其他依赖项。
SpringBootStarter优点:
bootstrap.properties/.yml 是SpringBoot应用程序启动加载的第一个配置文件,通常用于制定一些底层配置,如连接配置,加密配置等。通常情况下,这个文件来配置SpringCloudConfigServer的访问信息或者是其他一些需要启动顺序更早的配置。
application.yml/.properties则是应用程序的主要配置文件,包含了大部分业务相关的配置,如数据库配置,缓存配置,日志配置,服务端口配置等。该文件会覆盖bootstrap中的同名配置。
两者的区别?
bootstrap.yml/.properties可以使用SpringCloudConfigServer实现远程配置中心,从而实现动态的配置管理。
SpringBoot打的jar包内置了Tomcat,Jetty等Web服务器,可以直接通过命令java -jar xxx.jar启动应用程序,不需要手动部署到Web服务器中。这种方式使得应用程序的部署和运维非常方便。这种jar不可以作为普通的jar被其他项目依赖,即使依赖也无法使用其中的类。无法被其他项目依赖主要原因是他和普通jar结构不同。普通的jar包,解压后就是包名,包里面就是代码,而SpringBoot 的jar包解压后在\Boot-INF\classes目录下才是我们的代码,因此无法直接引用。如果非要引用,可以在pom.xml文件增加配置,将项目打成两个jar,一个可执行,一个可引用。
主要有两种不同方式,一个是使用Spring中的@Scheduled注解,另一个是使用第三方框架。
为了实现SpringBoot的安全性,我们使用spring-boot-starter-security依赖项,并且添加安全配置。配置类必须扩展WebSecurityConfigurationAdapter并覆盖其方法。
由于SpringBoot官方提供大量方便地开箱即用的Starter,包括SpringSecurity的Starter,使得Spring Boot项目中使用SpringSecurity更加容易,只需要添加一个依赖就可以保护所有的接口,所以如果是Spring Boot项目一般选择SpringSecurity。它和Shiro相比主要有以下区别:
SpringBoot仍然支持使用XML配置文件。不过SpringBoot更推荐基于Java注解的配置方式,因为它更加灵活且易于维护。如果要使用XML配置,通过@ImportResource注解可以引入一个XML配置。
@SpringBootApplication
@ImportResource("classpath:application-context.xml")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
首先使用@EnableTransactionManagement注解开启事务后,在Service层方法上加上@Transaction注解便可。
提供多套配置文件:
application.yml,application-dev.yml,application-test.yml,application-prod.yml
Swagger是一个API文档生成工具,可以根据代码注释自动生成API文档,同时提供易于使用的UI界面,可以让开发者方便地查看和测试API接口。