概述
什么是 Spring Boot
通过 Spring Boot ,可以很轻松的创建出独立的,基于生产级别的Spring应用程序,可以直接运行使用
Spring Boot 的优点
独立运行
简化配置
自动配置
无代码和xml配置生成
应用程序监控
如何快速搭建一个 Spring Boot 项目
- 使用 spring.io 网页搭建
- 使用 IDEA 创建
- 使用 Spring Boot cli
- 使用 spring toll suite
Spring Boot 与SpringCloud的区别
Spring Boot 是快速开发的Spring框架,SpringCloud 是完整的微服务框架。SpringCloud 依赖于 Spring Boot
Spring Boot 核心注解是哪个?它主要由哪几个注解组成
核心注解是启动类上的
@SpringBootApplication
,主要包含3个注解:
@SpringBootConfiguration
:组合了@Configuration
注解,实现配置文件的功能@EnableAutoConfiguration
:打开自动配置的功能,也可以关闭某个自动配置的选项。@SpringBootApplication(exclude={DataSourcesAutoConfiguration=false})
@ComponentScan
:Spring组件扫描
Spring Boot 支持哪些日志框架,推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging、log4j2、logback作为日志框架。
如果使用starters启动器,那么 Spring Boot 默认使用logback作为日志框架,推荐的日志框架是log4j2。
Spring Boot 2.X 有什么新特性,与1.X有什么区别?
配置变更
配置属性绑定
jdk版本升级
第三方类库升级
响应式Spring编程支持
http/2 协议支持
更多改进与增强
Spring Boot 支持什么前端模板
thymeleaf、freemarker,官方不推荐jsp有限制
Spring Boot 有哪些缺点
由于不用自己手动配置,报错时很难定位
运行 Spring Boot 有哪些方式
- 直接运行main方法
- 打包使用命令或部署到容器中运行
- 使用Maven、Gradle插件运行
Spring Boot 需要独立的容器运行吗?
不需要的,它内置了 Tomcat、jetty等容器
开启 Spring Boot 特性有哪几种方式
- 继承
spring-Boot-starter-parent
项目- 导入
spring-Boot-dependiencies
项目依赖
Spring Boot 实现热部署有哪几种方式
热部署就是不需要重新启动 Spring Boot 项目就可以将后台代码的改动更新到已经运行的项目中
主要有两种方式来实现热部署
- spring loaded
- spring-Boot -devtools
<dependency>
<groupId>org.springframework.Boot </groupId>
<artifactId>spring-Boot -devtools</artifactId>
</dependency>
Spring Boot 事务的使用
- 在启动类上添加
@EnableTransactionManagement
开启事务支持(其实默认是开启状态)- 在需要使用事务的方法或类上添加
@Transaction
注意:只有 public 方法可以使用事务
Async异步调用方法
- 在启动类上添加
@EnableAsync
开启异步调用- 在需要异步调用的方法上添加
@Async
如何在 Spring Boot 启动的时候运行一些特定的代码
可以实现接口
ApplicationRunner
或CommandLineRunner
,这两个接口的实现是一样的,都是提供了一个run方法
Spring Boot 有哪几种读取配置的方法
Spring Boot 可以通过
@PropertiesSource
、@ConfigurationProperties
、@Value
、@Environment
来绑定变量。
什么是JavaConfig
JavaConfig使Spring社区的产品,Spring3.0引入了它,主要是提供了Spring IOC容器的纯Java实现,因此避免了使用xml配置。
主要优点是:
- 面向对象配置。因为配置被定义为 JavaConfig 中的类,所以可以充分利用Java的面向对象功能。
- 一个配置类继承另一个配置类,重写它的@Bean方法,可以减少或消除xml配置。
- 基于依赖注入原则的外化配置的好处已经被证明了,但是开发人员不喜欢在xml和Java文件之间来回切换。
- JavaConfig为开发人员提供了一种纯Java来配置与xml配置类似的Spring容器。
- 类型安全与重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。
- Java5泛型的支持
- 现在可以按类型而不是按名称查找Bean,不需要任何类型转换或者基于字符串的查找。
常用的JavaConfig有哪些
@Configuration
:在类上写下这个注解,表示是配置类。@ComponentScan
:在配置类上写下这个注解,会扫描这个类所在的包下所有的配置类,相当于之前的<context:component-scan>
@Bean
:Bean的注入,相当于之前的<bean id="" class="">
@EanbleWebMvc
:相当于xml的<mvc:annotation-driven>
@ImportResource
:相当于xml的<import resource="ApplicationContextcache.xml">
Spring Boot 自动配置的原理是什么
主要是 Spring Boot 启动类上的核心注解
@ Spring Boot Applicaiton
,它在启动时会开启@EnableAutoConfiguration
的自动配置功能。
有了这个@EnableAutoConfiguration
之后就可以
- 首先会从
META_INF/spring.factories
中获取要配置的类,- 然后去重,在将 exclude 和 excludeName 配置的类过滤掉,
- 之后再筛选,将符合条件(@Contional)的自动配置类返回。
Spring Boot 配置的加载顺序
- properties 文件
- yaml 文件
- 系统环境变量
- 命令行参数
什么是YAML
YAML是一种人类可读的数据序列化语言,通常用于配置文件。与属性文件相比,当需要配置复杂的属性时,YAML看起来更加结构化,分层配置数据。
YAML配置的优势在哪?
- 配置有序
- 简洁明了,支持数组,数组中可以使基本数据类型也可以是对象
- 与properties文件相比,YAML不支持
@PropertySource
Spring Boot 是否可以使用xml配置
Spring Boot 推荐使用Java配置而非xml配置,但是也可以使用xml配置,通过
@ImportResource
可以引入一个xml配置。
Spring Boot 的核心配置文件是什么?Boot strap.properties和application.properties文件有什么区别?
单纯的使用 Spring Boot 开发,可能不太会遇到Boot strap文件,但是进行SpringCloud开发时,就需要用到这个文件了,特别是需要加载一些远程配置文件的时候。
Spring Boot 的两个核心配置文件:
- Bootstrap:由父applicaitonContext加载,比applicaiton文件先加载,在应用程序的上下文引导阶段生效。用于一些不能被覆盖的属性;一些需要加密/解密的场景;Spring Cloud 里面用来加载一些外部配置
- application:由applicaitonContext加载,用于 Spring Boot 项目的自动化配置
什么是Spring profiles
在实际的项目中,我们通常会在开发、测试、生产等环境中,使用不同的配置,例如数据库连接、redis配置等等,这个时候就需要通过Spring profiles机制来回切换不同的配置文件。
使用方法很简单就是在配置文件中配置 spring.profiles.active 指定要激活哪个配置文件。值是application-{profileName}.yml
里面的{profileName}
。
不同环境的配置文件
application.properties:主配置文件,默认开启
application-dev.properties:开发环境配置文件
application-test.properties:测试环境配置文件
application-prop.properties:生产环境配置文件
Spring Boot 多数据源拆分的思路
使用properties文件配置多个数据库,创建分包mapper,通过
@ConfigurationPropertires
读取配置,通过@MapperScan
注册到对应的mapper包中
Spring Boot 多数据源事务如何处理
- service层中的
@TransactionManager
使用 TransactionManager 使用的 DataSourceManag 配置的事务- 使用
jta-atomikos
配置的分布式事务管理
保护 Spring Boot 应用有哪些方法
- 升级到最新的版本
- 生产中使用HTTPS
- 使用CSRF保护
- 使用synk检查依赖关系
- 使用内容安全策略防止XSS攻击
如何实现 Spring Boot 程序的安全性
为了实现 Spring Boot 程序的安全性,可以使用
spring-Boot-starter-security
依赖项,并且必须实现安全配置。它只需要很少的代码,但是配置类必须扩展WebSecurityConfigurerAdapter
并覆盖其方法。
Spring Security和Shiro的区别
- Spring Security 是一个重量级的安全管理框架,Shiro 是一个轻量级的安全管理框架
- Spring Security 概念复杂,配置繁琐,Shiro 概念简单,配置简单
- Spring Security 功能强大,Shiro 功能简单
Spring Boot 中如何解决跨域问题
在前端中,可以使用 JSONP 来解决跨域问题,只不过它只能解决 get 请求的问题,就很鸡肋。在 RESTful 风格的应用中,我们可以通过后端实现 WebMvcConfigurer 接口重写他的 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);
}
}
Spring Boot 中的监视器是什么
Spring Boot actuactor 是Spring启动框架的重要功能之一。 Spring Boot 监视器可以帮助您访问生产环境中正在运行的应用程序的状态信息,有几个指标只能在生产环境中检查和监控,即使一些外部应用程序正在使用这些功能来向相关人员触发警报信息。监视器模块提供了一组公开的可直接通过 HTTP URL 访问 rest 端点来检查状态。
如何使用 Spring Boot 实现全局异常处理
Spring Boot 通过实现一个 ControlerAdvice 类来处理控制器类抛出的所有异常。
我们如何监视所有的 Spring Boot 微服务
在github上有一个开源项目叫Spring-Boot -admin,它提供了一个web ui,可以让我们可视化多个应用程序的度量。如果微服务数量少的话,可以使用 Spring Boot actuator提供的端点,查看每个应用程序的度量信息。
Spring Boot 性能如何优化
- 如果项目较多,类较多的时候,不要使用 @SpringBootApplicaiton 注解,而是使用 @Compoment 指定扫描包范围。
- 在项目启动的时候设置jvm初始内存与最大内存相等
- 切换合适的内置服务器
Spring Boot 微服务中如何实现 session 共享
可以通过 Spring session + redis方案来实现session共享,各个服务器将其session信息保存到redis中,当需要读取session的时候,直接从 redis 中获取即可。
Spring Boot 常用的 starter 有哪些
spring-Boot -starter-web:嵌入Tomcat和web开发所需要的servlet和jsp支持
spring-Boot -starter-data-jpa:数据库支持
spring-Boot -starter-data-redis:redis数据库支持
mybatis-spring-Boot -starter:第三方mybatis支持
Spring Boot 中的 starter到底是什么
可以理解成对依赖的一种合成,starter会把一个或一套功能相关的依赖都包含进来,避免了自己到处找依赖,还有各种包的冲突,大大的提高了开发的效率。
并且还会配置一些相关的默认值,如果我们自己去配置,会自动覆盖这些默认值
starter 的命名规则
官方提供的 starter 统一添加了 spring-boot-starter 作为前缀。第三方的不能使用这个前缀,例如 mybatis 的starter名字为:
mybatis-spring-boot-starter
Spring Boot 中如何实现定时任务
- 使用@Scheduled注解
- 使用第三方框架
spring-Boot-starter-parent 有什么用
- 定义了jdk版本
- 使用utf-8的编码
- 继承了 spring-Boot -dependence ,里面定义了依赖的版本
- 执行打包操作的配置
- 自动化的资源过滤
- 自动化的插件配置
- 针对 application 配置文件的过滤,包括通过 profile 定义的不同环境的配置文件
总结:就是打包用的
Spring Boot 如何实现打包
使用
mvn clean package
命令打包
Spring Boot 打成的 jar 与普通的 jar 有什么区别
Spring Boot 打成的jar是可执行的jar,而不能被引用,就算被引用也无法使用里面的类。而普通的jar可以被引用。这是因为里面的目录结构不一样,普通的jar打开后,jar的名称就是包名,里面放的就是源码,而 Spring Boot 的jar的源码是放在
Boot _INF/classes
目录下。如果真的想引用,可以在pom.xml文件里面添加配置,打成两个jar包,一个可引用,一个可运行。
Spring Boot 支持的配置文件格式
properties 和 yml
Spring Boot 的配置途径
- 默认属性
- 通过 @PropertySource 标注的属性源
- 打包在项目内的 applicaiton.properties 或 application.yml 文件
- 应用程序以外的 application.properties 或 application.yml 文件
- 随机生成带 random.* 的属性
- 操作系统环境变量
- JVM 系统属性
- java:comp/env 里的 JNDI 属性
- 命令行参数
这个是按照优先级的顺序排列的,优先级高的属性配置会覆盖优先级低的相同属性配置
application.properties 和 application.yml 可放位置,优先级
按优先级从低到高排
- 内置,在 classpath 目录下
- 内置,在 config 目录下
- 外置,在应用程序运行目录里
- 外置,在应用程序运行目录下的config文件夹下
除了这些之外,还可以在启动命令里面指定要执行的配置文件java -jar kk.jar -spring.config.location=文件路径
Spring Boot 如何修改端口号
直接修改配置文件的 server.port 的值
Spring Boot 如何兼容 Spring 应用
在启动类上添加
@ImportSource(locations={"classpath:spring.xml"})
获得 Bean 装配报告信息访问哪个端点
/beans 端点
关闭应用程序访问哪个端点
/shutdown 端点
这个端点是默认关闭的,可以在配置文件中开启endpoint.shutdown.enable=true
查看发布应用信息访问哪个端点
/info 端点
针对请求访问的几个组合注解
@PatchMapping
@PostMapping
@GetMapping
@PutMapping
@DeleteMapping
编写测试用例的注解
@SpringBootTest
Spring Boot 异常相关的注解
@ControlerAdvice
@ExceptionHandler
如何集成 Spring Boot 和 ActiveMq
添加
spring-boot-starter-activemq
依赖,它只需要很少的配置,并且不需要样板代码
最后
以上就是唠叨路灯为你收集整理的Spring Boot面试题的全部内容,希望文章能够帮你解决Spring Boot面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复