SpringBoot⾯试题(史上最全、持续更新、吐⾎推荐)
⽂章很长,建议收藏起来,慢慢读! 奉上以下珍贵的学习资源:
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送资源宝库: Java 必备百度⽹盘资源⼤合集价值>10000元
推荐:疯狂创客圈⾼质量博⽂
⾼并发必读的精彩博⽂
更多精彩博⽂ .....请参见【】
史上最全 Java ⾯试题 28 专题总⽬录
精⼼梳理、吐⾎推荐、史上最强、建议收藏阿⾥、京东、美团、头条.... 随意挑、横着⾛!!!
1. 2.
3.4、
5、6、
7.8、
9.10、
11.12、
13.15.
14、16、
17、18、
19、20、
21、26、
22.23、
24、25、
27、28、
史上最全 Java ⾯试题: SpringBoot 篇
SpringBoot 概述
什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的⼦项⽬,是 Spring 组件⼀站式解决⽅案,主要是简化了使⽤ Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上⼿。
Spring Boot、Spring MVC 和 Spring 有什么区别?
SpringFrame
SpringFramework 最重要的特征是依赖注⼊。所有 SpringModules 不是依赖注⼊就是 IOC 控制反转。
当我们恰当的使⽤ DI 或者是 IOC 的时候,我们可以开发松耦合应⽤。松耦合应⽤的单元测试可以很容易的进⾏。
SpringMVC
Spring MVC 提供了⼀种分离式的⽅法来开发 Web 应⽤。通过运⽤像 DispatcherServelet,MoudlAndView 和 ViewResolver 等⼀些简单的概念,开发 Web 应⽤将会变的⾮常简单。
SpringBoot
Spring 和 SpringMVC 的问题在于:需要配置⼤量的参数。
<pre Courier New", monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/></pre>
Spring Boot 通过⼀个⾃动配置和启动的项来⽬解决这个问题。为了更快的构建产品就绪应⽤程序,Spring Boot 提供了⼀些⾮功能性特征。
Spring Boot 有哪些优点?
Spring Boot 主要有如下优点:
容易上⼿,提升开发效率,为 Spring 开发提供⼀个更快、更⼴泛的⼊门体验。
开箱即⽤,远离繁琐的配置。
提供了⼀系列⼤型项⽬通⽤的⾮业务性功能,例如:内嵌服务器、安全管理、运⾏数据监控、运⾏状况检查和外部化配置等。
没有代码⽣成,也不需要XML配置。
避免⼤量的 Maven 导⼊和各种版本冲突。
为什么要⽤SpringBoot?
为了解决java开发中的,繁多的配置、底下的开发效率,复杂的部署流程,和第三⽅技术集成难度⼤的问题,产⽣了spring boot。
springboot 使⽤ “习惯优于配置”的理念让项⽬快速运⾏起来,使⽤springboot很容易创建⼀个独⽴运⾏的jar,内嵌servlet容器
springboot的核⼼功能⼀:独⽴运⾏spring项⽬,springboot可以以jar包的形式独⽴运⾏,运⾏⼀个springboot项⽬只需要 java -jar xxx.jar 来运⾏
springboot的核⼼功能⼆:内嵌servlet容器,可以内嵌tomcat,接天jetty,或者undertow,这样我们就可以不⽤war包形式部署项⽬
springboot的核⼼功能三,提供starter简化maven配置,spring提供了⼀系列starter pom 来简化maven的依赖加载,当使⽤了 spring-boot-starter-web时,会⾃动加载所需要的依赖包
springboot的核⼼功能三:⾃动配置spring sprintboot 会根据在类路径的jar包,类,为jar包中的类⾃动配置bean,这样会极⼤的减少使⽤的配置,会根据启动类所在的⽬录,⾃动配置bean
什么是 Spring Boot Stater ?
启动器是⼀套⽅便的依赖没描述符,它可以放在⾃⼰的程序中。你可以⼀站式的获取你所需要的 Spring 和相关技术,⽽不需要依赖描述符的通过⽰例代码搜索和复制黏贴的负载。
例如,如果你想使⽤ Sping 和 JPA 访问数据库,只需要你的项⽬包含 spring-boot-starter-data-jpa 依赖项,你就可以完美进⾏。
Spring Boot 还提供了其它的哪些 Starter 选项?
Spring Boot 也提供了其它的启动器项⽬包括,包括⽤于开发特定类型应⽤程序的典型依赖项。
spring-boot-starter-web-services - SOAP Web Services
spring-boot-starter-web - Web 和 RESTful 应⽤程序
spring-boot-starter-test - 单元测试和集成测试
spring-boot-starter-jdbc - 传统的 JDBC
spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能
spring-boot-starter-security - 使⽤ SpringSecurity 进⾏⾝份验证和授权
spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA
spring-boot-starter-data-rest - 使⽤ Spring Data REST 公布简单的 REST 服务
Spring 是如何快速创建产品就绪应⽤程序的?
Spring Boot 致⼒于快速产品就绪应⽤程序。为此,它提供了⼀些譬如⾼速缓存,⽇志记录,监控和嵌⼊式服务器等开箱即⽤的⾮功能性特征。
spring-boot-starter-actuator - 使⽤⼀些如监控和跟踪应⽤的⾼级功能
spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - 选择您的特定嵌⼊式 Servlet 容器
spring-boot-starter-logging - 使⽤ logback 进⾏⽇志记录
spring-boot-starter-cache - 启⽤ Spring Framework 的缓存⽀持
Spring2 和 Spring5 所需要的最低 Java 版本是什么?
Spring Boot 2.0 需要 Java8 或者更新的版本。Java6 和 Java7 已经不再⽀持。
Spring Boot 的核⼼注解是哪个?它主要由哪⼏个注解组成的?
启动类上⾯的注解是@SpringBootApplication,它也是 Spring Boot 的核⼼注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置⽂件的功能。
@EnableAutoConfiguration:打开⾃动配置的功能,也可以关闭某个⾃动配置的选项,如关闭数据源⾃动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
⾃动配置
什么是 JavaConfig?
Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java ⽅法。因此它有助于避免使⽤ XML 配置。使⽤ JavaConfig 的优点在于:
(1)⾯向对象的配置。由于配置被定义为 JavaConfig 中的类,因此⽤户可以充分利⽤ Java 中的⾯向对象功能。⼀个配置类可以继承另⼀个,重写它的@Bean ⽅法等。
(2)减少或消除 XML 配置。基于依赖注⼊原则的外化配置的好处已被证明。但是,许多开发⼈员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发⼈员提供了⼀种纯 Java ⽅法来配置与 XML 配置概念相似的 Spring 容器。从技术⾓度来讲,只使⽤ JavaConfig 配置类来配置容器是可⾏的,但实际上很多⼈认为将JavaConfig 与 XML 混合匹配是理想的。
(3)类型安全和重构友好。JavaConfig 提供了⼀种类型安全的⽅法来配置 Spring容器。由于 Java 5.0 对泛型的⽀持,现在可以按类型⽽不是按名称检索 bean,不需要任何强制转换或基于字符串的查。
Spring Boot ⾃动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是⾃动配置的核⼼,
@EnableAutoConfiguration 给容器导⼊META-INF/spring.factories ⾥定义的⾃动配置类。
筛选有效的⾃动配置类。
每⼀个⾃动配置类结合对应的 xxxProperties.java 读取配置⽂件进⾏⾃动配置功能
如何理解 Spring Boot 配置加载顺序?
在 Spring Boot ⾥⾯,可以使⽤以下⼏种⽅式来加载配置。
1)properties⽂件;
spring ioc注解2)YAML⽂件;
3)系统环境变量;
4)命令⾏参数;
等等……
我们可以在 Spring Beans ⾥⾯直接使⽤这些配置⽂件中加载的值,如:
1、使⽤ @Value 注解直接注⼊对应的值,这能获取到 Spring 中 Environment 的值;
2、使⽤ @ConfigurationProperties 注解把对应的值绑定到⼀个对象;
3、直接获取注⼊ Environment 进⾏获取;
配置属性的⽅式很多,Spring boot使⽤了⼀种独有的 PropertySource 可以很⽅便的覆盖属性的值。
配置属性加载的顺序如下:
1、开发者⼯具 Devtools 全局配置参数;
2、单元测试上的 [`@TestPropertySource](mailto:`@TestPropertySource)` 注解指定的参数;
3、单元测试上的 [`@SpringBootTest](mailto:`@SpringBootTest)` 注解指定的参数;
4、命令⾏指定的参数,如 java -jar springboot.jar --name="Java技术栈";
5、命令⾏中的 SPRING_APPLICATION_JSONJSON 指定参数, 如 java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar
6、ServletConfig 初始化参数;
7、ServletContext 初始化参数;
8、JNDI参数(如 java:comp/env/spring.application.json);
9、Java系统参数(来源:Properties());
10、操作系统环境变量参数;
11、RandomValuePropertySource 随机数,仅匹配:ramdom.*;
12、JAR包外⾯的配置⽂件参数(application-{profile}.properties(YAML))
13、JAR包⾥⾯的配置⽂件参数(application-{profile}.properties(YAML))
14、JAR包外⾯的配置⽂件参数(application.properties(YAML))
15、JAR包⾥⾯的配置⽂件参数(application.properties(YAML))
16、` 注解加载的参数;
17、默认参数(通过 SpringApplication.setDefaultProperties 指定);
数字⼩的优先级越⾼,即数字⼩的会覆盖数字⼤的参数值,我们来实践下,验证以上配置参数的加载顺序。
什么是 YAML?
YAML 是⼀种⼈类可读的数据序列化语⾔。它通常⽤于配置⽂件。与属性⽂件相⽐,如果我们想要在配置⽂件中添加复杂的属性,YAML ⽂件就更加结构化,⽽且更少混淆。可以看出 YAML 具有分层配置数据。
YAML 配置的优势在哪⾥ ?
YAML 现在可以算是⾮常流⾏的⼀种配置⽂件格式了,⽆论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相⽐到底有哪些优势呢?
配置有序,在⼀些特殊的场景下,配置有序很关键
⽀持数组,数组中的元素可以是基本数据类型也可以是对象
简洁
相⽐ properties 配置⽂件,YAML 还有⼀个缺点,就是不⽀持 @PropertySource 注解导⼊⾃定义的 YAML 配置。
Spring Boot 是否可以使⽤ XML 配置 ?
Spring Boot 推荐使⽤ Java 配置⽽⾮ XML 配置,但是 Spring Boot 中也可以使⽤ XML 配置,通过 @ImportResource 注解可以引⼊⼀个 XML 配置。
eg:
@ImportResource({"l","l"})
spring boot 核⼼配置⽂件是什么?bootstrap.properties 和 application.properties 有何区别 ?
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置⽂件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载⼀些远程配置⽂件的时侯。
spring boot 核⼼的两个配置⽂件:
bootstrap (. yml 或者 . properties):boostrap 由⽗ ApplicationContext 加载的,⽐ applicaton 优先加载,配置在应⽤程序上下⽂的引导阶段⽣效。⼀般来说我们在 Spring Cloud Config 或者 Nacos 中会⽤到它。且 boostrap ⾥⾯的属性不能被覆盖;
application (. yml 或者 . properties):由ApplicatonContext 加载,⽤于 spring boot 项⽬的⾃动化配置。
什么是 Spring Profiles?
Spring Profiles 允许⽤户根据不同配置⽂件(dev,test,prod 等)来注册 bean。因此,当应⽤程序在开发中运⾏时,只有某些 bean 可以加载,⽽在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是
Swagger ⽂档仅适⽤于 QA 环境,并且禁⽤所有其他⽂档。这可以使⽤配置⽂件来完成。
Spring Boot 使得使⽤配置⽂件⾮常简单。
如何在⾃定义端⼝上运⾏ Spring Boot 应⽤程序?
为了在⾃定义端⼝上运⾏ Spring Boot 应⽤程序,您可以在application.properties 中指定端⼝。
server.port = 8090
安全
如何实现 Spring Boot 应⽤程序的安全性?
为了实现 Spring Boot 的安全性,我们使⽤ spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其⽅法。
⽐较⼀下 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,Cross-origin resource sharing) 来解
决跨域问题。这种解决⽅案并⾮ Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML ⽂件中配置 CORS ,现在可以通过实现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);
}
}
12345678910111213
项⽬中前后端分离部署,所以需要解决跨域的问题。
我们使⽤cookie存放⽤户登录的信息,在spring进⾏权限控制,当权限不符合时,直接返回给⽤户固定的json结果。
当⽤户登录以后,正常使⽤;当⽤户退出登录状态时或者token过期时,由于和跨域的顺序有问题,出现了跨域的现象。
我们知道⼀个http请求,先⾛filter,到达servlet后才进⾏的处理,如果我们把cors放在filter⾥,就可以优先于权限执⾏。
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
12345678910111213141516
什么是 CSRF 攻击?
CSRF 代表跨站请求伪造。这是⼀种攻击,迫使最终⽤户在当前通过⾝份验证的Web 应⽤程序上执⾏不需要的操作。CSRF 攻击专门针对状态改变请求,⽽不是数据窃取,因为攻击者⽆法查看对伪造请求的响应。
监视器
Spring Boot 中的监视器是什么?
Spring boot actuator 是 spring 启动框架中的重要功能之⼀。Spring boot 监视器可帮助您访问⽣产环境中正在运⾏的应⽤程序的当前状态。有⼏个指标必须在⽣产环境中进⾏检查和监控。即使⼀些外部应⽤程序可能正在使⽤这些服务来向相关⼈员触发警报消息。监视器模块公开了⼀组可直接作为 HTTP URL 访问的REST 端点来检查状态。
如何在 Spring Boot 中禁⽤ Actuator 端点安全性?
默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR ⾓⾊的⽤户才能访问它们。安全性是使⽤标准的 HttpServletRequest.isUserInRole ⽅法实施的。 我们可以使⽤来禁⽤安全性。只有在执⾏机构端点在防⽕墙后访问时,才建议禁⽤安全性。
我们如何监视所有 Spring Boot 微服务?
Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应⽤程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运⾏很有帮助。但是,使⽤监视器的⼀个主要缺点或困难是,我们必须单独打开应⽤程序的知识点以了解其状态或健康状况。想象⼀下涉及 50 个应⽤程序的微服务,管理员将不得不击中所有 50 个应⽤程序的执⾏终端。为了帮助我们处理这种情况,
我们将使⽤位于的开源项⽬。 它建⽴在 Spring Boot Actuator 之上,它提供了⼀个 Web UI,使我们能够可视化多个应⽤程序的度量。
前后端分离,如何维护Rest API接⼝⽂档 ?
前后端分离开发⽇益流⾏,⼤部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离⼀定会有接⼝⽂档,不然会前后端会深深陷⼊到扯⽪中。⼀个⽐较笨的⽅法就是使⽤ word 或者 md 来维护接⼝⽂档,但是效率太低,接⼝⼀变,所有⼈⼿上的⽂档都得变。在 Spring Boot 中,这个问题常见的解决⽅案是 Swagger ,使⽤ Swagger 我们可以快速⽣成⼀个接⼝⽂档⽹站,接⼝⼀旦发⽣变化,⽂档就会⾃动更新,所有开发⼯程师访问这⼀个在线⽹站就可以获取到最新的接⼝⽂档,⾮常⽅便。
关于 Swagger 的⽤法,⼤家可以参考:SpringBoot整合Swagger2,再也不⽤维护接⼝⽂档了!
整合第三⽅项⽬
什么是 WebSockets?
WebSocket 是⼀种计算机通信协议,通过单个 TCP 连接提供全双⼯通信信道。
1、WebSocket 是双向的 -使⽤ WebSocket 客户端或服务器可以发起消息发送。
2、WebSocket 是全双⼯的 -客户端和服务器通信是相互独⽴的。
3、单个 TCP 连接 -初始连接使⽤ HTTP,然后将此连接升级到基于套接字的连接。然后这个单⼀连接⽤于所有未来的通信
4、Light -与 http 相⽐,WebSocket 消息数据交换要轻得多。
什么是 Spring Data ?
Spring Data 是 Spring 的⼀个⼦项⽬。⽤于简化数据库访问,⽀持NoSQL 和 关系数据存储。其主要⽬标是使数据库的访问变得⽅便快捷。Spring Data 具有如下特点:
SpringData 项⽬⽀持 NoSQL 存储:
MongoDB (⽂档数据库)
Neo4j(图形数据库)
Redis(键/值存储)
Hbase(列族数据库)
SpringData 项⽬所⽀持的关系数据存储技术:
JDBC
JPA
Spring Data Jpa 致⼒于减少数据访问层 (DAO) 的开发量. 开发者唯⼀要做的,就是声明持久层的接⼝,其他都交给 Spring Data JPA 来帮你完成!Spring Data JPA 通过规范⽅法的名字,根据符合规范的名字来确定⽅法需要实现什么样的逻辑。
什么是 Spring Batch?
Spring Boot Batch 提供可重⽤的函数,这些函数在处理⼤量记录时⾮常重要,包括⽇志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极⾼批量和⾼性能批处理作业。简单以及复杂的⼤批量批处理作业可以⾼度可扩展的⽅式利⽤框架处理重要⼤量的信息。
什么是 FreeMarker 模板?
FreeMarker 是⼀个基于 Java 的模板引擎,最初专注于使⽤ MVC 软件架构进⾏动态⽹页⽣成。使⽤
Freemarker 的主要优点是表⽰层和业务层的完全分离。程序员可以处理应⽤程序代码,⽽设计⼈员可以处理 html 页⾯设计。最后使⽤freemarker 可以将这些结合起来,给出最终的输出页⾯。
如何集成 Spring Boot 和 ActiveMQ?
对于集成 Spring Boot 和 ActiveMQ,我们使⽤依赖关系。 它只需要很少的配置,并且不需要样板代码。
什么是 Apache Kafka?
Apache Kafka 是⼀个分布式发布 - 订阅消息系统。它是⼀个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应⽤程序。这是⼀个 Apache 顶级项⽬。Kafka 适合离线和在线消息消费。
什么是 Swagger?你⽤ Spring Boot 实现了它吗?
Swagger ⼴泛⽤于可视化 API,使⽤ Swagger UI 为前端开发⼈员提供在线沙箱。Swagger 是⽤于⽣成 RESTful Web 服务的可视化表⽰的⼯具,规范和完整框架实现。它使⽂档能够以与服务器相同的速度更新。当通过Swagger 正确定义时,消费者可以使⽤最少量的实现逻辑来理解远程服务并与其进⾏交互。因此,Swagger消除了调⽤服务时的猜测。
前后端分离,如何维护接⼝⽂档 ?
前后端分离开发⽇益流⾏,⼤部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离⼀定会有接⼝⽂档,不然会前后端会深深陷⼊到扯⽪中。⼀个⽐较笨的⽅法就是使⽤ word 或者 md 来维护接⼝⽂档,但是效率太低,接⼝⼀变,所有⼈⼿上的⽂档都得变。在 Spring Boot 中,这个问题常见的解决⽅案是 Swagger ,使⽤ Swagger 我们可以快速⽣成⼀个接⼝⽂档⽹站,接⼝⼀旦发⽣变化,⽂档就会⾃动更新,所有开发⼯程师访问这⼀个在线⽹站就可以获取到最新的接⼝⽂档,⾮常⽅便。
其他
您使⽤了哪些 starter maven 依赖项?
使⽤了下⾯的⼀些依赖项
spring-boot-starter-activemq
spring-boot-starter-security
这有助于增加更少的依赖关系,并减少版本的冲突。
Spring Boot 中的 starter 到底是什么 ?
⾸先,这个 Starter 并⾮什么新的技术点,基本上还是基于 Spring 已有功能来实现的。⾸先它提供了⼀个⾃动化配置类,⼀般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定⼀个配置是否⽣效(条件注解就是 Spring 中原本就有的),然后它还会提供⼀系列的默认配置,也允许开发者根据实际情况⾃定义相关配置,然后通过类型安全的属性注⼊将这些配置属性注⼊进来,新注⼊的属性会代替掉默认属性。正因为如此,很多第三⽅框架,我们只需要引⼊依赖就可以直接使⽤了。当然,开发者也可以⾃定义 Starter
spring-boot-starter-parent 有什么⽤ ?
我们都知道,新创建⼀个 Spring Boot 项⽬,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作⽤:
定义了 Java 编译版本为 1.8 。
使⽤ UTF-8 格式编码。
继承⾃ spring-boot-dependencies,这个⾥边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
执⾏打包操作的配置。
⾃动化的资源过滤。
⾃动化的插件配置。
针对 application.properties 和 l 的资源过滤,包括通过 profile 定义的不同环境的配置⽂件,例如 application-dev.properties 和 l。
Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
Spring Boot 项⽬最终打包成的 jar 是可执⾏ jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运⾏,这种 jar 不可以作为普通的 jar 被其他项⽬依赖,即使依赖了也⽆法使⽤其中的类。
Spring Boot 的 jar ⽆法被其他项⽬依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包⾥就是我们的代码,⽽ Spring Boot 打包成的可执⾏ jar 解压后,在 \BOOT-INF\classes ⽬录下才是我们的代码,因此⽆法被直接引⽤。如果⾮要引⽤,可以在 l ⽂件中增加配置,将 Spring Boot 项⽬打包成两个 jar ,⼀个可执⾏,⼀个可引⽤。
运⾏ Spring Boot 有哪⼏种⽅式?
1)打包⽤命令或者放到容器中运⾏
2)⽤ Maven/ Gradle 插件运⾏
3)直接执⾏ main ⽅法运⾏
Spring Boot 需要独⽴的容器运⾏吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
开启 Spring Boot 特性有哪⼏种⽅式?
1)继承spring-boot-starter-parent项⽬
2)导⼊spring-boot-dependencies项⽬依赖
如何使⽤ Spring Boot 实现异常处理?
Spring 提供了⼀种使⽤ ControllerAdvice 处理异常的⾮常有⽤的⽅法。 我们通过实现⼀个 ControlerAdvice 类,来处理控制器类抛出的所有异常。
如何使⽤ Spring Boot 实现分页和排序?
使⽤ Spring Boot 实现分页⾮常简单。使⽤ Spring Data-JPA 可以实现将可分页的传递给存储库⽅法。
微服务中如何实现 session 共享 ?
在微服务中,⼀个完整的项⽬被拆分成多个不相同的独⽴的服务,各个服务独⽴部署在不同的服务器上,各⾃的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的⽅案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统⼀保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于Spring 中的代理过滤器实现,使得 session 的同步操作对开发⼈员⽽⾔是透明的,⾮常简便。
Spring Boot 中如何实现定时任务 ?
定时任务也是⼀个常见的需求,Spring Boot 中对于定时任务的⽀持主要还是来⾃ Spring 框架。
在 Spring Boot 中使⽤定时任务主要有两种不同的⽅式,⼀个就是使⽤ Spring 中的 @Scheduled 注解,另⼀个则是使⽤第三⽅框架 Quartz。
使⽤ Spring 中的 @Scheduled 的⽅式主要通过 @Scheduled 注解来实现。
使⽤ Quartz ,则按照 Quartz 的⽅式,定义 Job 和 Trigger 即可。
微服务中如何实现 session 共享 ?
在微服务中,⼀个完整的项⽬被拆分成多个不相同的独⽴的服务,各个服务独⽴部署在不同的服务器上,各⾃的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的⽅案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统⼀保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于Spring 中的代理过滤器实现,使得 session 的同步操作对开发⼈员⽽⾔是透明的,⾮常简便。 session 共享⼤家可以参考:Spring Boot ⼀个依赖搞定 session 共享,没有⽐这更简单的⽅案了!
打包部署
什么是嵌⼊式服务器?我们为什么要使⽤嵌⼊式服务器呢?
思考⼀下在你的虚拟机上部署应⽤程序需要些什么。
第⼀步: 安装 Java
第⼆部: 安装 Web 或者是应⽤程序的服务器(Tomat/Wbesphere/Weblogic 等等)
第三部: 部署应⽤程序 war 包
如果我们想简化这些步骤,应该如何做呢?
让我们来思考如何使服务器成为应⽤程序的⼀部分?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论