当前位置: 首页 > news >正文

SpringBoot常见问题

1 引言

        Spring Boot是一个基于Spring框架的快速开发脚手架,它简化了Spring应用的初始化和搭建过程,提供了众多便利的功能和特性,比如自动配置、嵌入式Tomcat等,让开发人员可以更加专注于业务逻辑的实现。
  Spring Boot还提供了强大的插件体系和广泛的集成,可以轻松地与其他技术栈集成,比如Thymeleaf模板、JPA、MyBatis、Redis、MongoDB等,同时也支持对微服务的开发和管理。
在这里插入图片描述

总之,Spring Boot简单易用、快速开发,是目前最流行的Java框架之一,得到了广大开发者的青睐。

2 常见问题

问题2 Springboot 有哪些优点?

  • 减少开发,测试时间和努力。
  • 使用JavaConfig有助于避免使用XML。
  • 避免大量的Maven导入和各种版本冲突。
  • 通过提供默认值快速开始开发。
  • 没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
  • 需要更少的配置 因为没有web.xml文件。只需添加用@ Configuration注释的类,然后添加用
    @Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。您甚至可以将
    @Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。
  • 基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:- Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring将在 (application{environment}.properties)中加载后续的应用程序属性文件。

问题3 怎么理解 Spring Boot 中 “约定优于配置”

Spring Boot Starter、Spring Boot Jpa 都是“约定优于配置“的一种体现。都是通过“约定优于配置“的设
计思路来设计的,Spring Boot Starter 在启动的过程中会根据约定的信息对资源进行初始化;Spring
Boot Jpa 通过约定的方式来自动生成 Sql ,避免大量无效代码编写。
约定优于配置,简单来说就是你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时才需要对约定进行替换配置。

问题4 Spring Boot 如何定义多套不同环境配置?

提供多套配置文件,如:

applcation.properties
application-dev.properties
application-test.properties
application-prod.properties

然后在applcation.properties文件中指定当前的环境spring.profiles.active=test,这时候读取的就是
application-test.properties文件。

问题5 Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过

@PropertySource
@Value
@Environment
@ConfigurationProperties

来绑定变量

问题6 SpringBoot 实现热部署有哪几种方式?

主要有两种方式:

  • Spring Loaded
  • Spring-boot-devtools

问题7 Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,
Spring Boot 将使用 Logback 作为默认日志框架

问题8 你如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring
及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入
spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递
性依赖。

问题9 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目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

问题10 Spring Boot 中如何解决跨域问题 ?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resourcesharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);}
}

项目中前后端分离部署,所以需要解决跨域的问题。我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。

@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.setAllowCredentials(true);UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);return new CorsFilter(urlBasedCorsConfigurationSource);}
}

问题11 什么是 CSRF 攻击?

CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

返回面试宝典

相关文章:

SpringBoot常见问题

1 引言 Spring Boot是一个基于Spring框架的快速开发脚手架,它简化了Spring应用的初始化和搭建过程,提供了众多便利的功能和特性,比如自动配置、嵌入式Tomcat等,让开发人员可以更加专注于业务逻辑的实现。   Spring Boot还提供了…...

五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOAHA 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3)&#xff…...

用 LangChain 和 Milvus 从零搭建 LLM 应用

如何从零搭建一个 LLM 应用?不妨试试 LangChain Milvus 的组合拳。 作为开发 LLM 应用的框架,LangChain 内部不仅包含诸多模块,而且支持外部集成;Milvus 同样可以支持诸多 LLM 集成,二者结合除了可以轻松搭建一个 LL…...

[Bug解决] Invalid bound statement (not found)出现原因和解决方法

1、问题描述 在写了一个很普通的查询语句之后,出现了下面的报错信息 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.oauth.mapper.WxVisitorQrBeanMapper.selectByComIdAndEmpId at org.apache.ibatis.binding.Mappe…...

Qt:Qt3个窗口类的区别、VS与QT项目转换

一、Qt3个窗口类的区别 QMainWindow:包含菜单栏、工具栏、状态栏 QWidget:普通的一个窗口,什么也不包括 QDialog:对话框,常用来做登录窗口、弹出窗口(例如设置页面) QDialog实现简易登录界面…...

uni-app判断不同端

大家好&#xff0c;今天给大家分享的知识是在uni-app中如何区分是在什么端操作的程序 话不多说直接上代码&#xff1a; // #ifdef APP-PLUS<view>APP端</view>// #endif// #ifdef H5<view>H5端</view>// #endif// #ifdef MP<view>小程序端</v…...

计算机网络-网络设备防火墙是什么?

一、防火墙基本概念 前面我们学习了交换机、路由器是网络中常用的设备&#xff0c;现实中还有一个很重要的设备-防火墙。防火墙这一设备通常用于两个网络之间有针对性的、逻辑意义上的隔离。在网络通信领域&#xff0c;防火墙是一种安全设备。它用于保护一个网络区域免受来自另…...

Code Composer Studio (CCS) - Breakpoint (断点)

Code Composer Studio [CCS] - Breakpoint [断点] 1. BreakpointReferences 1. Breakpoint 选中断点右键 -> Breakpoint Properties… Skip Count&#xff1a;跳过断点总数&#xff0c;在断点执行之前设置总数 Current Count&#xff1a;当前跳过断电累计值 References […...

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096

使用centos安装,注意安装之前,保证系统可以联网,然后执行yum update 先去更新一下系统,可以省掉很多麻烦 20240219_150031 这里我们使用centos系统吧,使用习惯了. ChatGlm首先需要一台个人计算机,或者服务器, 要的算力,训练最多,微调次之,推理需要算力最少 其实很多都支持C…...

分层钱包HD钱包

bc1 开头的通常指的是比特币&#xff08;Bitcoin&#xff09;的地址&#xff0c;这种格式遵循了比特币改进提案BIP 0173中定义的Bech32编码格式。Bech32地址也被称为"SegWit"地址&#xff0c;它们支持Segregated Witness功能&#xff0c;这是比特币网络为了提高区块链…...

基于python+mysql的宠物领养网站系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、宠物详情页、用户中心模块。后台功能包括&#xff1a;总览、领养管理、宠物管理、分类…...

机器学习入门--门控循环单元(GRU)原理与实践

GRU模型 随着深度学习领域的快速发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;已成为自然语言处理&#xff08;NLP&#xff09;等领域中常用的模型之一。但是&#xff0c;在RNN中&#xff0c;如果时间步数较大&#xff0c;会导致梯度消失或爆炸的问题&#xff0c;…...

GitHub Actions

GitHub Actions GitHub Actions 是 GitHub 提供的一种持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;解决方案。它可以让你在 GitHub 仓库中直接自动化、定制化和执行软件开发工作流程。 比如&#xff0c;当有新的推送到仓库或者新的 Pull Request…...

harmony 鸿蒙系统学习 安装ohpm报错 ohpm install failed

一. 安装配置 DevEco Studio 安装包时报错 execute ohpm install failed. Install task failed: ArkTS 3.2.12.5. Install ArkTS dependencies failed. 解决办法 找原因&#xff0c;首先&#xff0c;我的电脑中之前安装过node&#xff0c;也许是因为这个。&#xff08;其实…...

MySQL Replication

0 序言 MySQL Replication 是 MySQL 中的一个功能&#xff0c;允许从一个 MySQL 数据库服务器&#xff08;称为主服务器或 master&#xff09;复制数据和数据库结构到另一个服务器&#xff08;称为从服务器或 slave&#xff09;。这种复制是异步的&#xff0c;意味着从服务器不…...

redis分布式锁redisson

文章目录 1. 分布式锁1.1 基本原理和实现方式对比synchronized锁在集群模式下的问题多jvm使用同一个锁监视器分布式锁概念分布式锁须满足的条件分布式锁的实现 1.2 基于Redis的分布式锁获取锁&释放锁操作示例 基于Redis实现分布式锁初级版本ILock接口SimpleRedisLock使用示…...

制作一个简单的html网页

1. 特效按钮 2 可以独立使用的一个页面 3 底部小时钟 <!DOCTYPE html> <html> <head><title>Simple Webpage</title><style>/* 禁止鼠标右键 */body {-webkit-touch-callout: none; /* iOS Safari */-webkit-user-select: none; …...

js filter,every,includes 过滤数组

背景&#xff1a; 页面&#xff1a;在项目中遇到的&#xff0c;前端页面显示为&#xff0c;顶部是下拉搜索条件,下面是一个表格&#xff1b; 数据&#xff1a;接口请求一次性拿到所有&#xff1a;搜索条件里的下拉选项和表格中的数据&#xff1b; 现状&#xff1a;需要前端在搜…...

jenkins自动化部署

Jenkins安装 安装前提条件 yum install java-1.8.0-openjdk* git maven -y ​ 1.下载jenkins wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.346-1.1.noarch.rpm --no-check-certificate ​ jenkins的安装路径&#xff1a; /var/lib/jenkins/ ​ …...

【JavaScript】分支语句

目录 一、if语句 二、三元运算符 三、switch语句 JS中分支语句可以分为三种&#xff0c;分别是if语句、三元运算符、switch语句。 一、if语句 let num 10 if (num > 20) {console.log("大于20"); } else if (num < 20) {console.log("小于20");…...

C++学习笔记23:const 成员函数

目录 一、为什么需要 const 成员函数&#xff1f; 二、const 成员函数的写法 三、const 修饰的到底是什么&#xff1f; 四、const 成员函数不能修改成员变量 五、const 对象和普通对象的调用规则 1. const 对象只能调用 const 成员函数 2. 普通对象可以调用 const 成员函…...

源代码论文分享|社区养老服务平台的设计与实现!

有些毕业设计题目&#xff0c;听起来不是特别“炫”&#xff0c;但真的很适合做&#xff0c;也很容易写出实际意义。 比如这次分享的这个项目&#xff1a;社区养老服务平台的设计与实现。 现在社区养老、居家养老、智慧养老这些方向本身就很有现实背景&#xff0c;老师看到这…...

摆脱论文困扰!高效论文写作全流程AI论文工具推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;2026年AI论文工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。一…...

Unity+C#开发MMO服务端的务实架构与万人连接实战

1. 先泼一盆冷水&#xff1a;所谓“万人同时在线”的真实含义与常见误解 很多人看到“UnityC#开发万人MMO服务器”这个标题&#xff0c;第一反应是&#xff1a;哇&#xff0c;这得用多牛的分布式架构&#xff1f;是不是要上Kubernetes集群、分库分表、消息中间件全配齐&#xf…...

用 jose 正确实现 JWT 签发、验签与密钥轮换

1. 为什么你写的 JWT 总是“看起来能用&#xff0c;上线就出事”JWT&#xff08;JSON Web Token&#xff09;这东西&#xff0c;我第一次在项目里用的时候&#xff0c;也是照着文档抄了三行代码&#xff1a;jwt.sign(payload, secret)、jwt.verify(token, secret)、res.json({ …...

HS2-HF_Patch:终极Honey Select 2汉化与优化完整指南

HS2-HF_Patch&#xff1a;终极Honey Select 2汉化与优化完整指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch是专为Honey Select 2游戏设计的终…...

C语言学习笔记20260522—交换两个整数的值(地址传递)/打印1-100直接3倍数的数字/两个数最大公约数(最小公倍数)

一.知识点 函数需要改变实参时&#xff0c;必要要用地址传递&#xff0c;不能用值传递。当一个数%比自己大的数是&#xff0c;%的值就是自己本身。数辗转相除法&#xff08;欧几里得算法&#xff09;求两个数的最大公约数。两个数的最小公倍数为两个数的乘积除以最大公约数。 二…...

好用的长沙装修设计值得选的服务商

在装修设计领域&#xff0c;选择一家靠谱的服务商至关重要。长沙互知空间设计工作室&#xff0c;也就是长沙互知建筑设计有限公司&#xff0c;便是众多客户值得信赖的选择。下面将从几个方面详细分析它的优势&#xff0c;并与其他知名品牌进行对比&#xff0c;为大家提供一些实…...

抓包实战:用Wireshark深度解析ENSP中VxLAN静态隧道的封装过程

抓包实战&#xff1a;用Wireshark深度解析ENSP中VxLAN静态隧道的封装过程 当你第一次在Wireshark中看到VxLAN报文时&#xff0c;是否曾被那层层嵌套的协议头搞得一头雾水&#xff1f;本文将带你亲历一次完整的VxLAN报文"解剖"过程&#xff0c;通过ENSP实验环境中的真…...

MCP模型控制平面:AI自动化系统的可观察、可治理底座

1. 项目概述&#xff1a;MCP到底是什么&#xff0c;它凭什么被称为AI自动化的“金钥匙”“MCP——The Golden Key for AI Automation”这个标题一出来&#xff0c;很多刚接触AI工程化的朋友第一反应是&#xff1a;又一个新造词&#xff1f;听着像营销话术。但我在过去三年里&am…...