1.为什么要有SpringBoot?
Spring 目的在简化 J2EE 企业应用程序开发,而 SpringBoot 是简化 Spring 开发,减少配置文件
2.说出用 SpringBoot 的主要优点
- 开发基于 Spring 的应用程序比较容易
- SpringBoot 项目开发时间明显减少
- 不用编写大量 xml 配置和注释
- 存在很多默认配置,来减少开发工作(可以修改)
- 内嵌 Http 服务器,比如 Tomcat,可以更方便的开发和测试 web 应用程序
3.什么是 SpringBoot Starters?
是一系列依赖关系的集合,因为它的存在,项目依赖之间的关系就更加简单了【比如,在没有之前,开发 web 应用程序的时候,需要手动添加 SpringMVC 和 Tomcat等这些依赖,但有了之后,只需要添加一个 spring-boot-starter-web 一个依赖就可以了】
4.SpringBoot 支持哪些内嵌 Servlet 容器
- Tomcat 9.0 使用 Servlet 版本是 4.0
- Jetty 9.4 使用 Servlet 版本是 3.1
- Undertow 2.0 使用 Servlet 版本是 4.0
5.如何在 SpringBoot 应用程序中使用 Jetty 而不是 Tomcat?
在 pom.xml 文件中修改依赖,或者 build.gradle 来配置
6.介绍一下 @SpringBootApplication 注解
@SpringBootApplication 这个注解可以看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合
- @Configuration:允许在上下文中注册额外的 bean 或者导入其它配置类
- @EnableAutoConfiguration:启动 SpringBoot 的自动配置机制
- @ComponentScan:扫描被 @Component、@Service、@Controller 注解的 bean,会默认扫描该类所在包和包下所有的类
7.SpringBoot 的自动配置是如何实现的?
是因为 @SpringBootApplication 注解的原因,该注解包含的 @EnableAutoCOnfiguration 是启动自动配置的关键,它通过 Spring 提供的 @Import 注解导入了 AutoConfigurationImportSelector 类,该类中 getCandidaateConfigurations 方法会将所有自动配置类的信息以 List 的形式返回,这些配置信息会被 Spring 容器当作 bean 来管理。最后通过 @Conditional 注解以及它扩展的注解来吧 bean 交给 IOC
8.开发 RESTful Web 服务器常用的注解有哪些?
- Spring Bean 相关的:
- @Autowired:自动导入对象到类中
- @RestController:是 @Controller 和 @ResponseBody的集合,标示是控制器 bean,并且吧返回值直接给到 http 响应体中
- @Component:通用注解,表示是 Spring 组件,一般情况下如果不知道是哪个层的,就使用这个注解
- @Repository:对应持久层,用于数据库相关操作
- @Service:对应服务层,处理核心业务或者是复杂的逻辑
- @Controoler:对应 Spring MVC 控制层,用来接收请求并调用服务层来吧数据给前端页面
- hTTP 请求类型:
- @GetMapping:GET 请求,通常是查询系列的
- @PostMapping:POST 请求,通常是登录或者注册
- @PutMapping:PUT 请求,通常是添加
- @DeleteMapping:DELETE 请求,通常是删除
- 前后端传值:
- @RequestParam:获取查询参数
- @PathVariable:获取路径参数
- @RequestBody:用读取请求中数据为 json 格式的,会自动通过映射为 Java 对象
9.SpringBoot 常用的两种配置文件
application.properties 或者是 application.yml 进行配置,如果不配置就使用默认配置
10.什么是 YAML?YAML 配置的优势在哪里?
YAML 是一种可读的数据序列化语言,常用于配置文件。与属性文件相比,YAML 文件更加结构化,不容易混淆,也更管清晰,简介名了
11.SpringBoot 常用的读取配置文件的方法有哪些?
- 通过 @value("${property}") 注解:读取比较简单的配置信息
- 通过 @ConfigurationProperties 读取并与 bean 绑定【通过在使用的类上加 @Component 注解】
- 通过 @ConfigurationProperties 读取并校验【使用类没有加 @Component 注解,要在使用这个类的地方通过 @EnableConfigurationProperties 注册,再通过注解比如@Email 来校验格式】
- 通过 @PropertySource 读取指定的 properties 文件
12.SpringBoot 加载配置文件的优先级了解吗?
读取的是 yml 的话,如果它项目文件下存在 config 文件夹下,优先级是最高的,其次就是存在于 resources 下的 config 文件夹,最后是在 resources 下
如果按照同位置存在 properties 和 yml 还有 yaml 的话,优先级最高 properties 其次是 yml 最后是 yaml
13.常用的 Bean 映射工具有哪些?
Spring BeanUtils、Apache BeanUtils、MapStruct、ModelMapper、Dozer、Orika、JMapper【推荐使用 MapStruct】
14.SpringBoot 如何监控系统实际运行状况?
通过 SpringBoot Actuator 来进行简单的监控,添加完依赖以后,程序就会自带一些获取程序运行时的内部状态信息的 API
15.SpringBoot 如何做请求参数校验
- JSR 提供的校验注解
- @null:被注释的元素必须为 null
- @NotNull:必须不为 null
- @AssertTrue:必须为 true
- @AssertFalse:必须为 false
- @Min(value):必须是一个数字,而且值必须大于指定的最小值
- @Max(value):必须是一个数字,而且值必须小于指定的最大值
- @DecimalMin(value):与 Mix 相同,不同是设置的值是 字符串类型,而 Min 是 long 类型
- @DecimalMax(value):与 Max 相同,不同...
- @Size(max=,mix=):被注释的元素大小必须在指定的范围内
- @Digits(integer,fraction):被注释的元素必须是一个数字,其值必须在可接收的范围内【只规定了数字的结构。如:整数位最多多少位,小数位最多多少位】
- @Past:必须是一个过去的日期
- @Future:必须是一个将来的日期
- @Pattern(regex=,flag=):必须符合指定的正则表达式
- Hibernate Validator 提供的校验注解
- @NotBlank(message):验证字符串非 null,且长度必须大于 0
- @Email:电子邮箱地址格式
- @Length(mix=,max=):字符串的大小必须在指定的范围内
- @NotEmpty:字符串必须是非空
- @Range(minx=,max=,message):元素必须在合适的范围内
- 验证请求体(ResponseBody 的参数):在参数上加 @Valid 注解,如果验证失败,则会抛出异常,默认情况下,Spring 会吧这个异常转化为 400 请求错误的状态码
- 验证请求参数(路径参数和请求参数):在类上加 @Validated 注解来校验路径参数和请求参数
16.如何使用 SpringBoot 实现全局异常处理?
在处理异常类上使用 @ControllerAdivce 然后在方法上加 ExceptionHandler 来处理全局异常
17.SpringBoot 中如何实现定时任务?
使用 @Scheduled 注解在方法上面,比如给定设置 fixedRate = 5000 就是没五秒执行一次。注意的是需要在启动类上添加 @EnableScheduling 注解,作用就是发现 @Scheduled 注解然后执行该任务