面试题答案
一键面试实现思路
- 全局异常处理:在Spring Boot中创建一个全局异常处理器,捕获定时任务执行过程中抛出的异常,避免异常向上层传播影响其他定时任务。
- 异常记录:使用日志框架(如Logback、Log4j)记录异常信息,方便后续排查问题。
- 任务隔离:确保每个定时任务相互独立,一个任务的异常不会干扰其他任务。
关键技术点
- 自定义异常处理器:
- 创建一个实现
@ControllerAdvice
注解的类,用于全局处理异常。例如:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(Exception.class) public void handleException(Exception e) { logger.error("定时任务发生异常", e); } }
- 这里
@ControllerAdvice
使得该类成为全局异常处理类,@ExceptionHandler(Exception.class)
指定处理所有类型的异常,在方法内通过日志记录异常信息。
- 创建一个实现
- 日志框架:
- 以Logback为例,在
src/main/resources
下配置logback.xml
文件。例如:
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern>%d{yyyy - MM - dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern> </encoder> </appender> <root level="info"> <appender - ref ref="STDOUT" /> </root> </configuration>
- 配置文件定义了日志输出的格式和目的地(这里是控制台),在异常处理器中记录的异常信息会按照此格式输出。
- 以Logback为例,在
- 任务独立配置:
- 在Spring Boot的定时任务配置中,确保每个任务独立执行。例如,在
application.properties
中配置:
spring.task.scheduling.pool.size=10
- 这里
spring.task.scheduling.pool.size
设置了定时任务线程池大小,每个任务在独立线程中执行,实现任务隔离。同时也可以通过@Scheduled
注解中的fixedRate
、fixedDelay
等属性合理设置任务执行间隔,避免任务执行冲突。
- 在Spring Boot的定时任务配置中,确保每个任务独立执行。例如,在