欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > springboot全局异常与事物控制

springboot全局异常与事物控制

2024/12/22 13:34:53 来源:https://blog.csdn.net/2401_85045690/article/details/144299103  浏览:    关键词:springboot全局异常与事物控制

1. 全局异常处理

Spring Boot 提供了多种方式来处理全局异常,最常见的方法是使用 @ControllerAdvice@ExceptionHandler 注解。这种方法不仅可以捕获控制器层的异常,还可以跨多个控制器提供统一的错误响应格式。

实现步骤:
  • 创建一个全局异常处理器类:使用 @ControllerAdvice 注解定义一个全局异常处理器类。

  • 定义异常处理方法:使用 @ExceptionHandler 注解为特定类型的异常定义处理逻辑,并返回适当的 HTTP 响应。

代码示例

@ControllerAdvice
public class GlobalExceptionHandler {// 处理自定义异常@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<?> resourceNotFoundException(ResourceNotFoundException ex, WebRequest request) {ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);}// 处理所有其他异常@ExceptionHandler(Exception.class)public ResponseEntity<?> globalExceptionHandler(Exception ex, WebRequest request) {ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);}
}
自定义异常类(可选):

为了更好地组织异常信息,你可以创建自己的异常类,如 ResourceNotFoundException

 

public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message);}
}class ErrorDetails {private Date timestamp;private String message;private String details;public ErrorDetails(Date timestamp, String message, String details) {this.timestamp = timestamp;this.message = message;this.details = details;}// Getters and Setters
}

 

2. 事务控制

Spring Boot 使用声明式事务管理来简化事务处理。通过 @Transactional 注解可以轻松地将方法或整个类标记为需要事务支持。此外,Spring Boot 还提供了编程式事务管理的方式,但声明式方式更为常用且推荐。

实现步骤:
  • 添加依赖:确保你的项目包含了 JPA 或 MyBatis 等持久化框架的相关 Starter 依赖,这些通常会自动配置事务管理器。

  • 使用 @Transactional 注解:在需要事务管理的方法上添加 @Transactional 注解。你也可以在服务类级别应用该注解,以确保该类中的所有公共方法都参与事务。

代码示例 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;// 单个方法级别的事务控制@Transactionalpublic User createUser(User user) {return userRepository.save(user);}// 类级别的事务控制@Service@Transactionalpublic class OrderService {@Autowiredprivate OrderRepository orderRepository;public void placeOrder(Order order) {// 所有此方法内的数据库操作都会包含在一个事务中orderRepository.save(order);// ... 更多业务逻辑 ...}}
}
事务属性配置(可选):

@Transactional 注解允许你指定更多细粒度的事务属性,如传播行为、隔离级别、只读标志等。

@Transactional(readOnly = true)
public List<User> getAllUsers() {return userRepository.findAll();
}@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateUserData(User user) {userRepository.save(user);
}

总结

通过上述方法,可以有效地实现 Spring Boot 应用程序的全局异常处理和事务控制。全局异常处理提高了应用程序的健壮性,而正确的事务管理则保证了数据的一致性和完整性。结合这两种技术,可以使应用程序更加可靠和易于维护。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com