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

Spring相关面试题

目录

Spring中常用的注解有哪些

Spring Boot中@RestController和@Controller注解有什么区别?

Spring的注解@requestBody和@responseBody的区别

说说@Bean和@componentscan的区别

简单介绍一下springboot

Spring Boot有哪些常用的Starter依赖?

说说springboot的启动过程

Sprint boot自动装配原理 

Springboot中如何管理异常或者日志


Spring中常用的注解有哪些

项目启动相关注解

  • @SpringBootApplication:这是一个组合注解,包含了 @SpringBootConfiguration@EnableAutoConfiguration 和 @ComponentScan。它的作用是开启 Spring Boot 的自动配置功能,扫描组件并将当前类标记为配置类。通常会将其添加到主应用类上。

Bean 定义与管理注解

  • @Component:这是一个通用注解,用于将类标记为 Spring Bean,让 Spring 能自动扫描并将其注册到应用上下文中。
  • @Service:它是 @Component 的一种特殊形式,通常用于标记业务逻辑层的类。
  • @Repository:同样是 @Component 的特殊形式,主要用于标记数据访问层(DAO)的类,还能处理数据访问异常。
  • @Controller:也是 @Component 的特殊形式,用于标记控制器类,处理 HTTP 请求。
  • @RestController:这是 @Controller 和 @ResponseBody 的组合注解,用于创建 RESTful 风格的控制器。

依赖注入注解

  • @Autowired:用于自动装配 Bean,可作用于构造函数、字段或方法上。
  • @Qualifier:当存在多个同类型的 Bean 时,可使用 @Qualifier 指定要注入的 Bean 的名称。

配置相关注解

  • @Configuration:用于标记配置类,替代传统的 XML 配置文件。配置类中可以包含 @Bean 注解的方法。
  • @Bean:用于在配置类中定义 Bean,方法的返回值会被注册为 Spring Bean。
  • @Value:用于从配置文件(如 application.properties 或 application.yml)中读取属性值。
  • import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    public class MyConfig {@Beanpublic MyComponent myComponent() {return new MyComponent();}
    }

    请求映射注解

  • @RequestMapping:是一个通用的请求映射注解,可用于类和方法上,能指定请求的 URL、请求方法等。
  • import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;@Controller
    @RequestMapping("/example")
    public class ExampleController {@RequestMapping(value = "/test", method = RequestMethod.GET)@ResponseBodypublic String test() {return "Test response";}
    }
  • @GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping:它们是 @RequestMapping 的快捷方式,分别对应 HTTP 的 GET、POST、PUT、DELETE 和 PATCH 请求方法。

Spring Boot中@RestController和@Controller注解有什么区别?

注解本质

  • @Controller:它是 Spring 框架里的一个核心注解,继承自 @Component。其作用是把一个类标记为 Spring MVC 控制器,该类可处理 HTTP 请求。不过,它本身不会自动把方法返回值转换为 JSON 或 XML 等格式。
  • @RestController:这是 Spring 4.0 引入的一个组合注解,它结合了 @Controller 和 @ResponseBody 的功能。此注解会将类标记为控制器,同时默认把方法的返回值当作响应体返回,一般用于构建 RESTful 风格的 Web 服务。

返回值处理

  • @Controller:当控制器方法返回一个字符串时,Spring 会将其视为视图名称,接着去查找对应的视图模板并进行渲染。如果要返回 JSON 或 XML 数据,就需要在方法上添加 @ResponseBody 注解。
  • @RestController:其方法的返回值会直接作为响应体返回,无需额外添加 @ResponseBody 注解。Spring 会根据 HttpMessageConverter 把返回值转换为合适的格式(如 JSON、XML 等)
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class MyViewController {@GetMapping("/view")public String getView() {return "myView"; // 返回视图名称}@GetMapping("/data")@ResponseBodypublic String getData() {return "{\"message\": \"Hello, World!\"}"; // 返回 JSON 数据}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {@GetMapping("/rest")public String getRestData() {return "{\"message\": \"Hello, REST!\"}"; // 直接返回 JSON 数据}
}

使用场景

  • @Controller:常用于传统的 Spring MVC 应用,在这种应用中,控制器方法主要返回视图名称,由视图解析器负责渲染页面。
  • @RestController:适用于构建 RESTful 风格的 Web 服务,这类服务通常返回 JSON 或 XML 数据,供其他系统调用。

Spring的注解@requestBody和@responseBody的区别

功能用途

  • @RequestBody:此注解用于将 HTTP 请求体中的内容绑定到方法的参数上。在处理 POST、PUT 等请求时,客户端通常会将数据放在请求体中发送到服务器,借助 @RequestBody 注解,Spring 能把请求体中的数据自动转换为 Java 对象。
  • @ResponseBody:该注解用于将方法的返回值直接作为 HTTP 响应体返回给客户端。一般在构建 RESTful 服务时使用,Spring 会依据 HttpMessageConverter 把返回的 Java 对象转换为合适的格式,如 JSON、XML 等。

使用位置

  • @RequestBody:用在控制器方法的参数前
  • @ResponseBody:可放在控制器方法上,也能放在控制器类上。若放在类上,意味着该类中所有方法的返回值都会作为响应体返回。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@PostMapping("/example")public String handleRequest(@RequestBody User user) {return "Received user: " + user.getName();}
}class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {@GetMapping("/data")@ResponseBodypublic User getData() {User user = new User();user.setName("John");return user;}
}

数据转换

  • @RequestBody:Spring 会依据请求头中的 Content-Type 来选择合适的 HttpMessageConverter 进行数据转换。例如,若 Content-Type 是 application/json,就会使用 MappingJackson2HttpMessageConverter 把 JSON 数据转换为 Java 对象。
  • @ResponseBody:Spring 会根据请求头中的 Accept 字段以及返回对象的类型,选择合适的 HttpMessageConverter 进行数据转换。例如,若客户端期望的响应格式是 application/json,Spring 会使用 MappingJackson2HttpMessageConverter 把 Java 对象转换为 JSON 数据。

总结

  • @RequestBody 用于从 HTTP 请求体中读取数据并转换为 Java 对象,处理请求端发送的数据。
  • @ResponseBody 用于将 Java 对象转换为合适的格式并作为 HTTP 响应体返回给客户端,处理服务器返回的数据。在 Spring Boot 的 @RestController 注解中,实际上已经包含了 @ResponseBody 的功能。

说说@Bean和@componentscan的区别

功能用途

  • @Bean:此注解用于在配置类里定义 Bean。当你需要手动创建一个 Bean 实例,并且对其创建过程进行精细控制时,就可以使用 @Bean 注解。通常在配置类的方法上使用该注解,方法的返回值会被注册为 Spring Bean。
  • @ComponentScan:该注解的作用是告诉 Spring 去扫描指定包及其子包下的组件。Spring 会自动发现并注册带有 @Component@Service@Repository@Controller 等注解的类为 Bean。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyConfig {@Beanpublic MyService myService() {return new MyService();}
}
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan(basePackages = "com.example.service")
public class AppConfig {// 配置类内容
}

使用位置

  • @Bean:一般用在 @Configuration 注解标注的配置类的方法上。
  • @ComponentScan:通常用在 @Configuration 注解标注的配置类上,也可以用在 @SpringBootApplication 注解标注的主应用类上(因为 @SpringBootApplication 包含了 @ComponentScan)。

Bean 创建方式

  • @Bean:由开发者手动编写方法来创建 Bean 实例,能够在方法中添加自定义的逻辑,如初始化参数、调用其他方法等。
  • @ComponentScan:Spring 自动扫描并创建 Bean 实例,无需开发者手动编写创建代码。Spring 会根据类的构造函数和依赖关系来创建 Bean。

应用场景

  • @Bean:适用于以下场景:
    • 引入第三方库的类,这些类没有使用 Spring 注解,需要手动将其注册为 Bean。
    • 需要对 Bean 的创建过程进行复杂的初始化操作。
  • @ComponentScan:适用于以下场景:
    • 项目中有大量的组件类,希望 Spring 自动扫描并注册这些组件。
    • 开发自己的业务逻辑组件,如服务层、数据访问层等,使用 @Service@Repository 等注解标注后,通过 @ComponentScan 自动注册。

总结

  • @Bean 侧重于手动定义和创建 Bean,给予开发者对 Bean 创建过程更多的控制。
  • @ComponentScan 侧重于自动扫描和注册 Bean,简化了大量组件的注册过程。

简单介绍一下springboot

Spring Boot 是由 Pivotal 团队开发的一款用于简化 Spring 应用开发的框架,它基于 Spring 框架,旨在帮助开发者快速搭建和开发独立的、生产级别的 Spring 应用。以下从几个关键方面为你简单介绍 Spring Boot:

主要特点

  1. 快速搭建:提供了丰富的 Spring Boot Starter 依赖,通过在项目中添加相应的 Starter 依赖,就能快速集成各种功能,如 Web 开发、数据库访问、安全认证等,无需手动配置大量的依赖和 XML 文件。
  2. 自动配置:Spring Boot 会根据项目中添加的依赖,自动对 Spring 应用进行合理的默认配置,减少了开发者的配置工作量。例如,当添加了 spring-boot-starter-web 依赖后,Spring Boot 会自动配置嵌入式的 Tomcat 服务器和 Spring MVC。
  3. 嵌入式服务器:支持嵌入式的服务器,如 Tomcat、Jetty 或 Undertow,开发者可以将应用打包成可执行的 JAR 或 WAR 文件,直接运行,无需额外部署到外部服务器。
  4. 生产就绪:提供了一系列生产级别的特性,如健康检查、指标监控、外部化配置等,方便开发者在生产环境中对应用进行管理和监控。
  5. 无代码生成和 XML 配置:Spring Boot 倡导零配置原则,尽量避免使用代码生成和 XML 配置,使代码更加简洁和易于维护。

核心组件

  1. Spring Boot Starter:是一系列依赖的集合,每个 Starter 对应一个特定的功能模块,如 spring-boot-starter-web 用于开发 Web 应用,spring-boot-starter-data-jpa 用于使用 JPA 进行数据库访问。
  2. 自动配置模块:Spring Boot 的自动配置功能通过 @EnableAutoConfiguration 注解实现,它会根据类路径中的依赖和配置,自动配置 Spring 应用的各种组件。
  3. 嵌入式服务器:Spring Boot 内置了多种嵌入式服务器,开发者可以通过配置选择合适的服务器。例如,在 application.properties 或 application.yml 中配置服务器的端口号等信息。
  4. Spring Boot Actuator:提供了生产级别的功能,如健康检查、指标监控、审计等。通过添加 spring-boot-starter-actuator 依赖,开发者可以方便地开启这些功能。

开发流程

  1. 创建项目:可以使用 Spring Initializr(https://start.spring.io/) 快速创建一个 Spring Boot 项目,选择所需的依赖和项目信息,生成项目骨架。
  2. 编写代码:在生成的项目中编写业务逻辑代码,使用 Spring Boot 提供的注解和功能进行开发。例如,使用 @RestController 注解创建 RESTful 控制器,使用 @Service 注解创建业务逻辑服务。
  3. 配置应用:可以在 application.properties 或 application.yml 中配置应用的各种参数,如数据库连接信息、服务器端口号等。
  4. 运行应用:可以直接在 IDE 中运行 Spring Boot 应用的主类,或者将应用打包成可执行的 JAR 或 WAR 文件,通过命令行运行。

Spring Boot有哪些常用的Starter依赖?

Web 开发相关

  • spring-boot-starter-web:这是开发 Web 应用最基础的依赖,它集成了 Spring MVC、嵌入式的 Tomcat 服务器,能让你快速搭建基于 RESTful 的 Web 服务或者传统的 Web 应用。
  • spring-boot-starter-webflux:用于构建响应式 Web 应用,它基于 Reactor 项目,支持非阻塞、异步编程模型,适合处理高并发场景。

数据访问相关

  • spring-boot-starter-data-jpa:集成了 Spring Data JPA 和 Hibernate,方便进行数据库的持久化操作。它支持多种数据库,能减少大量的样板代码。
  • spring-boot-starter-data-mongodb:用于集成 MongoDB 数据库,支持响应式和非响应式的操作方式,可快速实现与 MongoDB 的交互。
  • spring-boot-starter-data-redis:集成 Redis 缓存数据库,提供了 RedisTemplate 和 StringRedisTemplate 等工具类,方便进行缓存操作。

安全相关

  • spring-boot-starter-security:为 Spring Boot 应用提供了全面的安全功能,包括身份验证、授权、密码加密等,能有效保护应用的安全性。

日志相关

  • spring-boot-starter-logging:Spring Boot 默认的日志依赖,底层使用 Logback 实现,可方便地进行日志配置和管理。

测试相关

  • spring-boot-starter-test:包含了多种测试框架,如 JUnit、Mockito、Spring Test 等,可用于编写和运行单元测试、集成测试等。

说说springboot的启动过程

Spring Boot 启动过程可以分为多个关键阶段,以下为你详细阐述其主要步骤:

1. 启动入口

Spring Boot 应用的启动通常从包含 main 方法的主类开始,主类上会添加 @SpringBootApplication 注解。例如:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

SpringApplication.run 方法是启动的核心入口,它接收主类和命令行参数作为输入。

2. 创建 SpringApplication 实例

在 SpringApplication.run 方法内部,首先会创建一个 SpringApplication 实例。在创建过程中,会进行以下操作:

  • 推断应用类型:判断应用是 Web 应用(如 Servlet Web 应用或 Reactive Web 应用)还是非 Web 应用。
  • 查找并加载初始化器(ApplicationContextInitializer:初始化器可以在 ApplicationContext 创建后但未刷新之前对其进行定制化配置。
  • 查找并加载监听器(ApplicationListener:监听器可以监听 Spring Boot 应用启动过程中的各种事件,如应用启动事件、应用就绪事件等。
  • 推断主类:确定包含 main 方法的主类。

3. 准备环境

创建好 SpringApplication 实例后,会开始准备应用运行的环境。这一阶段会完成以下任务:

  • 创建 ConfigurableEnvironment 实例:根据应用类型创建对应的环境对象,如 StandardServletEnvironment 用于 Servlet Web 应用。
  • 配置环境:加载配置文件(如 application.propertiesapplication.yml)和命令行参数,将其添加到环境的属性源中。
  • 触发 ApplicationEnvironmentPreparedEvent 事件:通知所有监听器环境已准备好。

4. 创建 ApplicationContext

根据之前推断的应用类型,创建相应的 ApplicationContext 实例。例如:

  • 对于 Servlet Web 应用,创建 AnnotationConfigServletWebServerApplicationContext 实例。
  • 对于 Reactive Web 应用,创建 AnnotationConfigReactiveWebServerApplicationContext 实例。
  • 对于非 Web 应用,创建 AnnotationConfigApplicationContext 实例。

5. 准备 ApplicationContext

在 ApplicationConext 创建后,会进行一些准备工作:

  • 设置环境:将之前准备好的环境对象设置到 ApplicationContext 中。
  • 应用初始化器:调用之前加载的所有初始化器对 ApplicationContext 进行定制化配置。
  • 触发 ApplicationContextInitializedEvent 事件:通知监听器 ApplicationContext 已初始化。

6. 加载 Bean 定义

通过 @SpringBootApplication 注解及其包含的 @ComponentScan 注解,Spring Boot 会扫描指定包及其子包下的所有组件(如 @Component@Service@Repository 等注解标注的类),并将这些组件注册为 Bean 定义。同时,也会处理 @Configuration 注解标注的配置类,解析其中的 @Bean 方法,将其返回的对象注册为 Bean 定义。

7. 刷新 ApplicationContext

调用 ApplicationContext 的 refresh 方法,这是 Spring 容器初始化的核心步骤,会完成以下重要操作:

  • 创建并初始化 BeanFactory:负责管理和创建所有的 Bean 实例。
  • 注册 BeanPostProcessor:用于在 Bean 实例化前后进行额外的处理,如 AOP 代理的创建。
  • 初始化消息源:用于国际化支持。
  • 初始化事件广播器:用于发布应用事件。
  • 创建嵌入式服务器(如果是 Web 应用):如 Tomcat、Jetty 或 Undertow,并启动服务器。
  • 实例化所有单例 Bean:根据之前注册的 Bean 定义,创建并初始化所有单例 Bean。
  • 触发 ApplicationReadyEvent 事件:表示应用已准备好接收请求。

8. 启动完成

当 ApplicationContext 刷新完成后,Spring Boot 应用启动成功,开始监听客户端请求(如果是 Web 应用),并可以正常提供服务。

综上所述,Spring Boot 启动过程是一个复杂且有序的过程,通过自动化配置和组件扫描等机制,大大简化了 Spring 应用的开发和部署。

Sprint boot自动装配原理 

Spring Boot 自动装配主要依赖于以下几个核心注解:

  • @SpringBootApplication:这是一个组合注解,包含了 @SpringBootConfiguration@EnableAutoConfiguration 和 @ComponentScan。其中,@EnableAutoConfiguration 是开启自动装配的关键注解。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
  • @EnableAutoConfiguration:该注解会导入 AutoConfigurationImportSelector 类,借助这个类来加载自动配置类。

 自动配置类的加载

AutoConfigurationImportSelector 类会在 Spring 应用启动时发挥作用,它的主要任务是加载自动配置类,具体步骤如下:

  • 查找自动配置类AutoConfigurationImportSelector 会从 META - INF/spring.factories 文件中查找所有的自动配置类。这个文件存在于各个 Spring Boot Starter 依赖的 JAR 包中,文件内容以键值对形式呈现,其中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 作为键,对应的值是一系列自动配置类的全限定名。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
  • 过滤自动配置类:找到所有自动配置类后,AutoConfigurationImportSelector 会根据一些条件对这些类进行过滤。例如,会检查 @Conditional 注解及其派生注解(如 @ConditionalOnClass@ConditionalOnMissingBean 等),只有当条件满足时,对应的自动配置类才会被加载。

 条件注解的作用

条件注解是自动装配的重要组成部分,它能根据不同的条件决定是否加载某个自动配置类或创建某个 Bean。常见的条件注解如下:

  • @ConditionalOnClass:当类路径中存在指定的类时,该条件才会满足。
  • @ConditionalOnMissingClass : classpath中不存在该类时起效
  • @ConditionalOnBean : DI容器中存在该类型Bean时起效
  • @ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效
  • @ConditionalOnSingleCandidate : DI容器中该类型Bean只有一个或 @Primary的只有一个时起效
  • @ConditionalOnExpression : SpEL表达式结果为true时
  • @ConditionalOnProperty : 参数设置或者值一致时起效
  • @ConditionalOnResource : 指定的文件存在时起效
  • @ConditionalOnJndi : 指定的JNDI存在时起效
  • @ConditionalOnJava : 指定的Java版本存在时起效
  • @ConditionalOnWebApplication : Web应用环境下起效
  • @ConditionalOnNotWebApplication : 非Web应用环境下起效

自动配置的顺序

Spring Boot 会按照一定的顺序加载自动配置类,以确保配置的正确性。可以使用 @AutoConfigureOrder 或 @AutoConfigureBefore@AutoConfigureAfter 注解来调整自动配置类的加载顺序。

总结

Spring Boot 自动装配的原理是通过 @EnableAutoConfiguration 注解导入 AutoConfigurationImportSelector 类,从 META - INF/spring.factories 文件中查找自动配置类,再根据条件注解对这些类进行过滤和加载,从而实现自动配置 Spring 应用的功能。

Springboot中如何管理异常或者日志

1. 使用 @ExceptionHandler 处理控制器内异常

@ExceptionHandler 注解能在控制器类里定义异常处理方法,该方法可处理该控制器中所有方法抛出的指定类型的异常。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/example")public String example() {throw new RuntimeException("Something went wrong");}@ExceptionHandler(RuntimeException.class)public ResponseEntity<String> handleRuntimeException(RuntimeException e) {return new ResponseEntity<>("Error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}
}

2. 使用 @ControllerAdvice 进行全局异常处理

@ControllerAdvice 注解能定义一个全局的异常处理类,其中的 @ExceptionHandler 方法可处理所有控制器抛出的指定类型的异常。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return new ResponseEntity<>("Global Error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}
}

3. 使用 @ResponseStatus 注解

@ResponseStatus 注解可用于异常类,指定当该异常抛出时应返回的 HTTP 状态码。

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message);}
}

在控制器方法中抛出该异常:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {@GetMapping("/resource")public String getResource() {throw new ResourceNotFoundException("Resource not found");}
}

日志管理

1. Spring Boot 默认日志框架

Spring Boot 默认使用 Logback 作为日志框架,无需额外配置即可使用。可以在 application.properties 或 application.yml 中配置日志级别。

# application.properties
logging.level.root=INFO
logging.level.com.example=DEBUG

yaml

# application.yml
logging:level:root: INFOcom.example: DEBUG

2. 自定义日志配置文件

可以创建自定义的 Logback 配置文件 logback.xml 来对日志进行更细致的配置。

xml

<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="CONSOLE" /></root>
</configuration>

3. 集成其他日志框架

若要使用其他日志框架,如 Log4j2,需要排除默认的 Logback 依赖,然后添加 Log4j2 的依赖。

xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>
</dependencies>

接着在 application.properties 或 application.yml 中配置 Log4j2。

通过以上方法,你可以在 Spring Boot 中有效地管理异常和日志。

相关文章:

Spring相关面试题

目录 Spring中常用的注解有哪些 Spring Boot中RestController和Controller注解有什么区别&#xff1f; Spring的注解requestBody和responseBody的区别 说说Bean和componentscan的区别 简单介绍一下springboot Spring Boot有哪些常用的Starter依赖&#xff1f; 说说sprin…...

Python学习- 数据结构类型

一. list list_data [10, 20, 30]列表&#xff1a;是一个不限制类型&#xff0c;可增加&#xff0c;修改&#xff0c;删除的数据类型 可操作的方法&#xff1a;append&#xff0c;extend, pop&#xff0c;del &#xff0c;insert append: 可向list最后一个位置添加一个元…...

Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测

设计Azure云架构方案实现Azure Delta Lake和Azure Databricks&#xff0c;结合 Azure Event Hubs/Kafka 摄入实时数据&#xff0c;通过 Delta Lake 实现 Exactly-Once 语义&#xff0c;实时欺诈检测&#xff08;流数据写入 Delta Lake&#xff0c;批处理模型实时更新&#xff0…...

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...

C#零基础入门篇(18. 文件操作指南)

## 一、文件操作基础 在C#中&#xff0c;文件操作主要通过System.IO命名空间中的类来实现&#xff0c;例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### &#xff08;一&#xff09;文件读取 1. **使用File.ReadAllText方法读取文件内容为字符串** …...

深入探究 JVM 堆的垃圾回收机制(一)— 判活

垃圾回收分为两步&#xff1a;1&#xff09;判定对象是否存活。2&#xff09;将“消亡”的对象进行内存回收。 1 判定对象存活 可达性分析算法&#xff1a;通过一系列“GC Roots”对象作为起始节点集&#xff0c;从这些节点开始&#xff0c;根据引用关系向下搜索&#xff0c;…...

SQL优化主要有哪些方式

对经常查询的区分度高的条件字段建立索引&#xff0c;也就是用在where条件里的字段。使用没有建立索引的非主键字段作为条件查询时&#xff0c;会进行全表扫描&#xff0c;因为这个字段的数据分步是不规律的&#xff0c;但是需要避免在频繁更新的字段上建立索引&#xff0c;因为…...

基于Spring Boot的公司资产网站的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…...

OSPF 协议详解:从概念原理到配置实践的全网互通实现

什么是OSPF OSPF&#xff08;开放最短路径优先&#xff09;是由IETF开发的基于链路状态的自治系统内部路由协议&#xff0c;用来代替存在一些问题的RIP协议。与距离矢量协议不同&#xff0c;链路状态路由协议关心网络中链路活接口的状态&#xff08;包括UP、DOWN、IP地址、掩码…...

【C++】多态

目录 文章目录 前言 一、多态的概念 二、多态的定义及实现 三、重载/重写/隐藏的对比 四、纯虚函数和抽象类 五、多态的原理 总结 前言 本文主要讲述C中的多态&#xff0c;涉及的概念有虚函数、协变、纯虚函数、抽象类、虚表指针和虚函数表等。 一、多态的概念 多态分…...

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引&#xff0c;进入 Docker rpm 包下载的地址&#xff0c;根据自己系统的架构和具体版本选择对应的路径 这里使用 Index of linux/centos/7/x86_64/stable/ 版本&#xff0c;根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包 最终使用 yum …...

STT-MRAM CIM 赋能边缘 AI:高性能噪声鲁棒贝叶斯神经网络宏架构详解

引言 近年来&#xff0c;基于卷积神经网络&#xff08;CNN&#xff09;和视觉转换器&#xff08;ViT&#xff09;的存算一体&#xff08;CIM&#xff09;边缘AI设备因其低延迟、高能效、低成本等性能受到越来越广泛的关注。然而&#xff0c;当环境中存在噪声时&#xff08;例如…...

Performance Hub Active Report

Performance Hub 是 Oracle Enterprise Manager Database Express &#xff08;EM Express&#xff09; 中的一项功能&#xff0c;可提供给定时间范围内所有性能数据的新整合视图。用户可以使用 Database Express 页面顶部的时间选择器选择时间范围&#xff0c;详细信息选项卡将…...

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…...

【数学建模】TOPSIS法简介及应用

文章目录 TOPSIS法的基本原理TOPSIS法的基本步骤TOPSIS法的应用总结 在 多目标决策分析中&#xff0c;我们常常需要在多个选择中找到一个最优解。 TOPSIS&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09;法是一个广泛应用的决策方法…...

优选算法训练篇08--力扣15.三数之和(难度中等)

目录 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 3.解法(排序双指针) 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &…...

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…...

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 &#xff08;一&#xff09;模块定位&#xff1a;连接语言模型与知识世界的桥梁 &#xff08;二&#xff09;核心任务&#xff1a;四大关键问题的协调解法 &#xff08;三&#xff09;系统特征&#xff1a;性能、精度…...

解决stm32引脚如果选择输入模式

1. 输入模式分类 STM32的GPIO输入模式主要分为以下四种&#xff1a; 浮空输入&#xff08;Floating Input / Input Floating&#xff09; 上拉输入&#xff08;Input Pull-Up&#xff09; 下拉输入&#xff08;Input Pull-Down&#xff09; 模拟输入&#xff08;Analog Inp…...

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop&#xff0c;安装过程很简单&#xff0c;一路下一步即可。用 OnlyOffice 制作 PDF 模版&#xff08;表单&#xff09; 使用 OnlyOffice 表单设计器&#xff0c;制作表单&#xff0c;如下图 注意命名…...

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…...

鸿蒙HarmonyOS NEXT应用崩溃分析及修复

鸿蒙HarmonyOS NEXT应用崩溃分析及修复 如何保证应用的健壮性&#xff0c;其中一个指标就是看崩溃率&#xff0c;如何降低崩溃率&#xff0c;就需要知道存在哪些崩溃&#xff0c;然后对症下药&#xff0c;解决崩溃。那么鸿蒙应用中存在哪些崩溃类型呢&#xff1f;又改如何解决…...

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面&#xff0c;结合PyCATIA库实现CATIA V5的自动化操作&#xff0c;提供两大核心功能&#xff1a; ​空几何体清理&#xff1a;智能识别并删除零件文档中的无内容几何体&#xff08;Bodies&#xff09;​空几何图形集清理&#xff1…...

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…...

Mysql深分页的解决方案

在数据量非常大的情况下&#xff0c;深分页查询则变得很常见&#xff0c;深分页会导致MySQL需要扫描大量前面的数据&#xff0c;从而效率低下。例如&#xff0c;使用LIMIT 100000, 10时&#xff0c;MySQL需要扫描前100000条数据才能找到第10000页的数据。 在MySQL中解决深分页…...

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算&#xff0c;当需要把工作流程转换为可视化界面时&#xff0c;开发人员不懂专业逻辑&#xff0c;手动摸索公式很大可能出错&#xff0c;而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理&#xff0c;支持各种格…...

Apache Tomcat CVE-2025-24813 安全漏洞

Apache Tomcat CVE-2025-24813被广泛利用&#xff0c;但是他必须要满足两个点&#xff1a; 1.被广泛的使用&#xff0c;并且部署在服务器中。 2.漏洞必须依赖在服务器中的配置。 并且漏洞补丁已经发布。 漏洞攻击方式&#xff1a; CVE-2025-24813 是 Apache Tomcat 部分 PUT…...

Spring常用注解汇总

1. IOC容器与Bean管理 注解说明示例Component通用注解&#xff0c;标记类为Spring Bean Component public class MyService { ... } Controller标记Web控制器&#xff08;应用在MVC的控制层&#xff09; Controller public class UserController { ... } Service标记业务逻辑层…...

【CXX-Qt】2.1.1 为 WebAssembly 构建

CXX-Qt 及其编写的应用程序可以编译为 WebAssembly&#xff0c;但存在一些限制。以下是关于如何为 WASM 目标构建的详细说明。 你需要安装 Qt for WebAssembly。下一篇将展示已测试的版本。 此外&#xff0c;如果尚未完成&#xff0c;请从此处克隆 emsdk git 仓库。 使用正确…...

MySql创建分区表并且按月分区

前言 在mysql中&#xff0c;按月份分区&#xff0c;再使用分区字段时间来查询数据将会很快&#xff0c;因为这样只需要扫描指定的分区。因此&#xff0c;在处理大量数据时&#xff0c;使用分区表是一个非常好的选择。 1、创建表&#xff0c;并使用RANGE COLUMNS分区 按创建时间…...

YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Flink实战教程从入门到精通(基础篇)(一)Flink简介

目录 一、Flink 二、谁在用Flink? 三、Flink特点 1、批流统一 2、性能卓越 3、规模计算 4、生态兼容性 5、高容错性 四、Flink介绍 1、无界数据 2、有界数据流 3、有状态流处理 五、Flink的发展历史 六、Flink的核心特点 1、高吞吐和低延迟 2、结果的准确性 …...

C/C++编程:Openssl使用 Windows安装包32和64位 RSA加密/解密、AES-GCM加密/解密以及ECDSA签名/验证示例

Openssl的头文件和库 C/C使用openssl&#xff0c;需要openssl的头文件和库&#xff0c;这些都在安装包里。从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的包含 lib 和 include 文件的安装包。 也可以从官网下载源码&#xff0c;再编译成安装包&#xff0…...

Es6新特性

1. let 和 const 概念 let&#xff1a;用于声明 块级作用域 的变量。const&#xff1a;用于声明 块级作用域 的常量&#xff0c;声明后不可重新赋值&#xff08;但可以修改对象的属性或数组的内容&#xff09;。 原理 JavaScript 在 ES5 中只有全局作用域和函数作用域&…...

大数据学习(80)-数仓分层

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

StarRocks 升级注意事项

前段时间升级了生产环境的 StarRocks&#xff0c;从 3.3.3 升级到了 3.3.9&#xff0c;期间还是踩了不少坑所以在这里记录下。 因为我们的集群使用的是存算分离的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以没法按照官方的流程进入虚…...

Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

LabVIEW软件长时间运行导致蓝屏问题排查与优化

计算机在长时间运行LabVIEW或其他软件后出现蓝屏&#xff08;BSOD&#xff09;&#xff0c;通常由硬件资源耗尽、驱动冲突或软件内存泄漏引发。本文提供从日志分析到根本性优化的全流程解决方案&#xff0c;确保系统稳定运行。 一、蓝屏记录查询方法 1. 查看Windows事件日志 操…...

【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行

导读&#xff1a;本文介绍ACAI&#xff0c;其构建一个基于CCA的解决方案&#xff0c;使得机密虚拟机能够安全地使用加速器&#xff0c;同时保持与现有应用程序的兼容性和安全性&#xff0c;能够实现对加速器的安全访问。 原文链接&#xff1a;ACAI: Protecting Accelerator Ex…...

【WRF模拟】WPS预处理设置生成文件地址

目录 WPS 运行 geogrid.exe在 namelist.wps 中指定 geogrid.exe 输出路径WPS 运行 ungrid.exe方法 1:在 namelist.wps 中指定输出路径方法 2:手动移动 FILE:* 文件方法 3:使用环境变量 WPS_UNGRIB_OUTPUT(不推荐)另:设置文件链接地址WPS 运行 metgrid.exe方法 1:在 name…...

Midjourney使用教程—2.作品修改

当您已生成第一张Midjourney图像的时候&#xff0c;接下来该做什么&#xff1f;了解我们用于修改图像的工具&#xff01;使用 Midjourney 制作图像后&#xff0c;您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…...

基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务

一、概念 以个人图书管理为例&#xff0c;创建一个ABAP RESTful 应用程序编程模型项目。最终要实现的效果&#xff1a; 用于管理书籍的程序。读取、修改和删除书籍。 二、Data Model-数据模型 2.1 创建项目基础数据库表 首先&#xff0c;创建一个图书相关的表&#xff0c;点…...

微信小程序登陆之反向代理

一.背景 在互联网架构中&#xff0c;反向代理是连接客户端与后端服务的核心组件。它的核心价值在于&#xff1a; 安全性&#xff1a;隐藏内部服务细节&#xff0c;防止直接暴露到公网。 负载均衡&#xff1a;分散请求到多个后端实例&#xff0c;提升吞吐量。 SSL终止&#x…...

[解决] PDF转图片,中文乱码或显示方框的解决方案

在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。 一、问题现象 在使用Java库(如Apache PDFBox)将PDF转换为图片时,如果PDF文件中…...

面试康复训练-SQL语句

一&#xff0c;数据库操作 1查看所有库 show databases; --查看所有库2使用数据库 use 数据库名; --使用数据库&#xff1b; 3查看当前使用数据库 select database(); --查看当前使用的数据库 4 创建数据库 create databse 数据库名 charsetutf8; --创建数据库 5删…...

经典面试题:C/C++中static关键字的三大核心作用与实战应用

一、修饰局部变量&#xff1a;改变生命周期&#xff0c;保留跨调用状态 核心作用&#xff1a; ​延长生命周期&#xff1a;将局部变量从栈区移至静态存储区&#xff08;数据段或BSS段&#xff09;&#xff0c;生命周期与程序一致​保留状态&#xff1a;变量在函数多次调用间保…...

Linux固定IP方法(RedHat+Net模式)

1、查看当前网关 ip route | grep default 2、配置静态IP 双击重启 3、验证...

JVM 学习前置知识

JVM 学习前置知识 Java 开发环境层次结构解析 下图展示了 Java 开发环境的层级关系及其核心组件&#xff0c;从底层操作系统到上层开发工具&#xff0c;逐步构建完整的开发与运行环境&#xff1a; 1. 操作系统&#xff08;Windows, MacOS, Linux, Solaris&#xff09; 作用&…...

数据结构---图的深度优先遍历(DFS)

一、与树的深度优先遍历之间的联系 1.类似于树的先根遍历。 递归访问各个结点&#xff1a; 2.图的深度优先遍历 先设置一个数组&#xff0c;初始值全部设置为false&#xff0c;先访问一个结点&#xff0c;在用一个循环&#xff0c;依次检查和这个结点相邻的其他结点&#xff0c…...