要解决的问题:
1、如何精简配置;如何让编码、部署、监控变简单;
2、如何方便的让spring生态圈和其他工具链整合。
什么是SpringBoot?
通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大
多数Spring Boot应用程序需要最少的Spring配置。
SpringBoot的特征?
创建独立的Spring应用程序
直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
提供固化的“starter”依赖项,以简化构建配置
尽可能自动配置Spring和3rd Party库
提供可用于生产的功能,例如指标,运行状况检查和外部化配置
完全没有代码生成,也不需要XML配置
为什么要用SpringBoot
快速开发,快速整合,配置简化、内嵌服务容器
SpringBoot与SpringCloud区别
SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。
如何快速构建一个SpringBoot项目?
通过Web界面使用。http://start.spring.io
通过Spring Tool Suite使用。
通过IntelliJ IDEA使用。
使用Spring Boot CLI使用。
SpringBoot启动类注解?它是由哪些注解组成?
@SpringBootApplication
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@ComponentScan:Spring组件扫描
Spring Boot有哪些优点?
Spring Boot 主要有如下优点:
容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架。
开箱即用,远离繁琐的配置。
提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
SpringBoot总结就是使编码变简单、配置变简单、部署变简单、监控变简单等等
Spring Boot*的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Confifiguration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如: java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
什么是yaml?
YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加 结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。
SpringBoot支持配置文件的格式?
properties
java.xiaokaxiu.name = xiaoka
yml
java:
xiaokaxiu:
name: xiaoka
SpringBoot启动方式?
main方法
命令行 java -jar 的方式
mvn/gradle
SpringBoot需要独立的容器运行?
不需要,内置了 Tomcat/Jetty。
SpringBoot配置途径?
命令行参数
java:comp/env里的JNDI属性
JVM系统属性
操作系统环境变量
随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})
应用程序以外的application.properties或者appliaction.yml文件
打包在应用程序内的application.properties或者appliaction.yml文件
通过@PropertySource标注的属性源
默认属性
tips:这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。
application.properties和application.yml文件可放位置?优先级?
对于 application.properties 和 application.yml 来说,他们之间的配置内容如果不冲突的话 ,是可以互补使用的 ,但是如果他们之间的配置冲突的话 ,项目会优先读取 application.properties 中的配置,所以 application.properties的优先级大于application.yml的优先级 。
针对同一个文件,放在不同的文件目录下,他们的优先级也是不一样的。 以下是配置文件可以存放的四个位置,从上到下,优先级依次降低:Spring Boot项目中的application.properties配置文件一共可以出现在如下4个位置:
项目根目录下的config文件夹中。
项目根目录下。
classpath下的config文件夹中。
classpath下。
如果这4个位置中都有application.properties文件,那么加载的优先级从1到4依次降低,如图所示。Spring Boot将按照这个优先级查找配置信息,并加载到Spring Environment中。
如果开发者在开发中未使用application.properties,而是使用了application.yml作为配置文件,那么配置文件的优先级与上图一致。
默认情况下,Spring Boot按照上图的顺序依次查找application.properties并加载。如果开发者不想使用application.properties作为配置文件名,也可以自己定义。例如,在resources目录下创建一个配置文件app.properties
,然后将项目打成jar包,打包成功后,使用如下命令运行:
也可以在运行时再指定配置文件的名字。使用spring.config.location可以指定配置文件所在目录(注意需要以/
结束),代码如下:
SpringBoot自动配置原理?
@EnableAutoConfiguration (开启自动配置) 该注解引入了AutoConfigurationImportSelector,该类中
的方法会扫描所有存在META-INF/spring.factories的jar包。
SpringBoot热部署方式?
热部署就是可以不用重新运行SpringBoot项目可以实现操作后台代码自动更新到以运行的项目中
主要有两种方式:
Spring Loaded
Spring-boot-devtools
「bootstrap.yml」 和「application.yml」?
bootstrap.yml 优先于application.yml
SpringBoot如何修改端口号?
yml中:
server :
port : 8888
properties:
server.port = 8888
命令1:
java -jar xiaoka.jar ——— server.port=8888
命令2:
java - Dserver.port=8888 -jar xiaoka.jar
开启SpringBoot特性的几种方式?
继承spring-boot-starter-parent项目
导入spring-boot-dependencies项目依赖
SpringBoot如何兼容Spring项目?
在启动类加:@ImportResource(locations = {"classpath:spring.xml"})
SpringBoot配置监控?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
获得Bean装配报告信息访问哪个端点?
/beans 端点
关闭应用程序访问哪个端点?
/shutdown
该端点默认是关闭的,如果开启,需要如下设置。
endpoints:
shutdown:
enabled: true
或者properties格式也是可以的。
查看发布应用信息访问哪个端点?
/info
针对请求访问的几个组合注解?
@PatchMapping
@PostMapping
@GetMapping
@PutMapping
@DeleteMapping
SpringBoot中的starter?
Starter是Spring Boot的四大核心功能特性之一,除此之外,Spring Boot还有自动装配、Actuator监控等特性。
Spring Boot里面的这些特性,都是为了让开发者在开发基于Spring生态下的企业级应用时,只需要关心业务逻辑,
减少对配置和外部环境的依赖。
其中,Starter是启动依赖,它的主要作用有几个。
Starter组件以功能为纬度,来维护对应的jar包的版本依赖,
使得开发者可以不需要去关心这些版本冲突这种容易出错的细节。
Starter组件会把对应功能的所有jar包依赖全部导入进来,避免了开发者自己去引入依赖带来的麻烦。
Starter内部集成了自动装配的机制,也就说在程序中依赖对应的starter组件以后,
这个组件自动会集成到Spring生态下,并且对于相关Bean的管理,也是基于自动装配机制来完成。
依赖Starter组件后,这个组件对应的功能所需要维护的外部化配置,会自动集成到Spring Boot里面,
我们只需要在application.properties文件里面进行维护就行了,比如Redis这个starter,只需要在application.properties
文件里面添加redis的连接信息就可以直接使用了。
在我看来,Starter组件几乎完美的体现了Spring Boot里面约定优于配置的理念。
另外,Spring Boot官方提供了很多的Starter组件,比如Redis、JPA、MongoDB等等。
但是官方并不一定维护了所有中间件的Starter,所以对于不存在的Starter,第三方组件一般会自己去维护一个。
官方的starter和第三方的starter组件,最大的区别在于命名上。
官方维护的starter的以spring-boot-starter开头的前缀。
第三方维护的starter是以spring-boot-starter结尾的后缀
这也是一种约定优于配置的体现。
SpringBoot集成Mybatis?
mybatis-spring-boot-starter
什么是SpringProfifiles?
一般来说我们从开发到生产,经过开发(dev)、测试(test)、上线(prod)。不同的时刻我们会用不同的配置。
Spring Profifiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。它们可以让我们自己选择什么时候用什么配置。
对应到Spring中也是一样的。在实际开发中会同时存在dev、uat、prod等多套环境,这些环境共用一套代码逻辑,但却需要不同的配置。例如dev环境要连接测试数据库,而prod则需要连接生产数据库等等。
不同的环境的配置文件?
可以是 application-{profifile}.properties/yml ,但默认是启动主配置文件application.properties,一般
来说我们的不同环境配置如下。
application.properties
:主配置文件
application-dev.properties
:开发环境配置文件
application-test.properties
:测试环境配置文件
application.prop-properties
:生产环境配置文件
如何激活某个环境的配置?
比如我们激活开发环境。
yml:
spring:
profiles:
active: dev
properties:
spring.profiles.active=dev
命令行:
java -jar xiaoka-v1.0.jar ———spring.profiles.active=dev
编写测试用例的注解?
@SpringBootTest
SpringBoot异常处理相关注解?
@ControllerAdvice
@ExceptionHandler
SpringBoot 1.x 和2.x区别?
配置变更
JDK 版本升级
第三方类库升级
响应式 Spring 编程支持
HTTP/2 支持
配置属性绑定
更多改进与加强
SpringBoot读取配置相关注解有?
@PropertySource
@Value
@Environment
@ConfigurationProperties
SpringBoot支持什么前端模板
thymeleaf,freemarker,jsp,官方不推荐JSP会有限制
SpringBoot的缺点
我觉得是为难人,SpringBoot在目前我觉得没有什么缺点,非要找一个出来我觉得就是
由于不用自己做的配置,报错时很难定位。
SpringBoot事物的使用
SpringBoot的事物很简单,首先使用注解EnableTransactionManagement开启事物之后,然后在
Service方法上添加注解Transactional便可。
SpringBoot多数据源拆分的思路
先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfifigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中
如何实现 Spring Boot 应用程序的安全性?
为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfifigurerAdapter 并覆盖其方法。
比较一下 Spring Security 和 Shiro各自的优缺点?
由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的
Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就
可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是
一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security
相比,主要有如下一些特点:
Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单
Spring Boot 中如何解决跨域问题 ?
跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfifigurer接口然后重写addCorsMappings方法解决跨域问题。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}