Spring声明式事务管理是通过注解或 XML 配置来实现

在 Spring 中,声明式事务管理是通过注解或 XML 配置来实现的。最常用的方式是使用注解。以下是一些常见的声明式事务的编写例子:

1. 使用注解方式

示例代码:
复制代码

java

复制代码
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    // 进行事务管理的方法
    @Transactional
    public void createUser(User user) {
        // 执行数据库操作,例如保存用户
        userRepository.save(user);
        
        // 可能的其他数据库操作
        // 如果其中任何操作抛出异常,事务将会回滚
    }
}

2. 配置类中使用注解

在使用注解的情况下,确保你的 Spring Boot 应用程序或配置类上开启事务管理。

复制代码

java

复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class AppConfig {
    // 其他 Bean 配置
}

3. 事务传播行为

你可以在注解中指定事务的传播行为。

复制代码

java

复制代码
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional(propagation = Propagation.REQUIRED)
    public void createUser(User user) {
        userRepository.save(user);
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void updateUser(User user) {
        // 这将会在一个新的事务中执行
        userRepository.update(user);
    }
}

4. 处理异常与回滚

可以使用 rollbackFor 指定哪些异常会导致事务回滚。

复制代码

java

复制代码
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional(rollbackFor = Exception.class)
    public void createUser(User user) {
        userRepository.save(user);
        
        // 可能的其他操作,抛出异常将导致回滚
    }
}

5. 在 XML 配置中定义事务

如果你使用 XML 配置,可以在 applicationContext.xml 中配置声明式事务。

复制代码

xml

复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="...">

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    
    <bean id="userService" class="com.example.UserService"/>
</beans>

总结

上述示例展示了如何使用声明式事务管理来简化事务操作。通过使用注解或 XML 配置,开发者可以轻松地控制事务的行为,而无需编写繁琐的事务管理代码。根据具体的需求,选择合适的方式进行事务管理。

相关推荐
_Evan_Yao4 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
paopaokaka_luck10 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
雷一言说12 小时前
Spring AI 2.0 Tool Calling 实战:用一个订单查询跑通整个调用链
spring
xieliyu.16 小时前
【JavaEE进阶】Spring Boot 日志:从 System.out 到 @Slf4j,6 个级别 + 4 类配置一篇讲透
java·spring boot·spring·java-ee·springboot·logback·slf4j
IT_Octopus17 小时前
Apollo 配置中心入门:一所“小学校“读懂 Portal、Meta Server、Config Service
java·后端·spring
ly768920 小时前
Spring Security 过滤器链定制:认证、CORS 与 CSRF 的先后顺序
java·spring boot·spring·spring security·csrf·cors·过滤器链
ly76891 天前
Kafka 消费者重试与死信:Spring for Apache Kafka 的边界设计
spring·kafka·apache·并发消费·消费者重试·死信主题·位移提交
OxYGC1 天前
Spring 面经系列 · 第 6 篇:Spring MVC 请求全流程、父子容器与零配置原理
java·spring·mvc
小尹哥-程序员2 天前
第9集:Spring AI Advisor链:像Spring MVC拦截器一样优雅
人工智能·spring·mvc
9527!到!2 天前
Springboot @value读取配置参数踩坑&推荐解决方案
java·spring boot·spring