Spring 中的事务管理器(TransactionManager)
**事务管理** ,一个被说烂的也被看烂的话题,还是面试中常问到的问题之一。 本文会从设计角度,一步步的剖析 Spring 事务管理的设计思路(都会设计事务管理器了,还能玩不转?)。 一、为什么需要事务管理? {#一为什么需要事务管理} -------------------------- 先看看如果没有事务管理器的话,如果想让多个操作(方法/类)处在一个事务里应该怎么做...
**事务管理** ,一个被说烂的也被看烂的话题,还是面试中常问到的问题之一。 本文会从设计角度,一步步的剖析 Spring 事务管理的设计思路(都会设计事务管理器了,还能玩不转?)。 一、为什么需要事务管理? {#一为什么需要事务管理} -------------------------- 先看看如果没有事务管理器的话,如果想让多个操作(方法/类)处在一个事务里应该怎么做...
Spring Boot 中默认使用的 JSON 框架是 [jackson](https://github.com/FasterXML/jackson),它负责把 JSON 请求体反序列化为 Java 对象,并把响应给客户端的 Java 对象序列化为 JSON 字符串。 本文将会详细介绍如何在 Spring Boot 应用中自定义 jackson 对 `Date`、`Local...
日志系统对应用程序的重要性不言而喻。Spring Boot 为应用程序的日志记录提供了强大的支持,并提供了各种自定义选项。在本教程中,你将学习如何在 Spring Boot 应用程序中使用 [Logback](https://logback.qos.ch/) 和 [Log4j2](https://logging.apache.org/log4j/2.x/) 实现日志记录 Sp...
1、概览 {#1概览} ----------- 在本教程中,我们将讨论 Spring Boot 3.1 中引入的增强型 Testcontainers 支持。 这个更新提供了一种更简化的配置容器的方法,并允许我们启动它们进行本地开发。因此,使用 Testcontainers 进行开发和运行测试变得更加无缝和高效。 2、SpringBoot 3.1 之前的 Testconta...
在本文中,你将学习如何使用 Spring Boot 内置的 Testcontainers 和 Docker Compose 支持,在开发模式下运行外部服务。Spring Boot 在当前的最新版本 3.1 中引入了这些功能,你已经可以在 Spring Boot 应用的测试中利用 Testcontainers。在应用程序启动时运行外部数据库、message broker 或其他外...
1、概览 {#1概览} ----------- 在 web 开发过程中,经常会遇到 HTTP 403 forbidden error。 在本教程中,我们将学习如何解决 Spring Boot POST 请求中的 403 错误。我们将首先了解 403 错误的含义,然后探讨在 Spring Boot 应用程序中解决该错误的步骤。 2、403 Error 是什么? {#2403...
1、简介 {#1简介} ----------- 在本教程中,我们将介绍如何使用 PostgreSQL 的 `LISTEN` / `NOTIFY` 命令来在 Spring Boot 应用中实现简单的 MQ。 2、PostgreSQL 的 LISTEN/NOTIFY 机制简介 {#2postgresql-的-listennotify-机制简介} ----------------...
1、概览 {#1概览} ----------- 当我们在 IDE 中运行代码分析工具时,它可能会对带有 `@Autowired` 注解的字段发出 "Field injection is not recommended" 的警告。 在本教程中,我们将探讨为什么不推荐字段注入,以及我们可以使用哪些替代方法。 2、依赖注入(DI) {#2依赖注入di} --...
[Spring Data JPA](/spring-data-jpa/) 是 Spring 框架提供的一个模块,用于简化与关系型数据库的交互和数据访问。它基于JPA(Java Persistence API)标准,并提供了一组易于使用的API和工具,帮助开发人员更轻松地进行数据库操作。通过Spring Data JPA,开发人员可以通过编写简洁的代码来执行常见的 CRUD 操作...
Spring Profiles 简介 {#spring-profiles-简介} ---------------------------------------- 通常,软件应用程序会在不同的环境中运行。在开发过程中,它将在 `local` 环境运行,然后我们可能会将它部署到 `QA`、`Staging`、`Performance` 环境中,最后再部署到 `Productio...