spring中service调用service的事务控制

本文探讨了在使用Spring框架进行事务控制时可能出现的问题,特别是在一个Service调用另一个Service时的事务传播行为。通过示例说明了不同类型的异常如何影响事务的提交与回滚,并介绍了如何通过配置来统一事务管理。

在使用SPRING的事务控制时,事务一般都是加在SERVICE层的,这个时候如果一个SERVICE调用另一个SERVICE时有可能会出现事务控制问题,比如第二个SERVICE抛出了异常,第一个SERVICE却正常提交了,比如下面这个例子:

事务配置

<tx:method name="add*" propagation="REQUIRED"/>  

测试代码

@Test  
public void testAddUser() throws Exception {  
    UserServiceImpl service = (UserServiceImpl) context.getBean("userServiceImpl", UserServiceImpl.class);  
    USER u = new USER();  
    u.setCreated("2015-05-05");  
    u.setCreator(123);  
    u.setName("test");  
    u.setPassword("test");  
    service.addUser(u);  
}  

SERVICE层:

public void addUser(USER user) throws Exception {  
    userDaoImpl.saveUser(user);  
    delByUsername(user.getName());  
}  
  
public void delByUsername(String name) throws Exception {  
    throw new FileNotFoundException("fjkdl");  
}  

当第二个SERVICE抛出异常的时候,第一个SERVICE却正常提交了,USER被加入到了数据库当中。先不改配置,我们改下SERVICE代码:

    public void addUser(USER user) throws Exception {  
        userDaoImpl.saveUser(user);  
        delByUsername(user.getName());  
    }  
  
    public void delByUsername(String name) throws Exception {  
//        String s = null;  
//        s.length();  
        throw new RuntimeException("runtime e");  
    }  

让第二个SERVICE抛出运行时异常,再测试,会发现这个时候第一个SERVICE的事务也回滚了,USER没有插入数据库中。

从测试中我们可以发现,在事务传播为propagation="REQUIRED"的时候,如果SERVICE中抛出检查型异常,其它的事务可以正常提交,但是如果SERVICE抛出运行时异常,则所有的SERVICE共享同一事务。

如果我们改下配置,如下:

<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  

这个时候,无论SERVICE里抛出运行时异常还是检查型异常,将共享同一事务,也就是说只要有异常,事务将自动回滚。 现在只发现了这个问题,如果大家遇到什么问题也可以提出来一起讨论下。

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值