上述代码中,若transfer方法内部调用transferA方法 按照常规对于Require_New事务传播行为的理解,循环中被提交的各transferA不回滚,生效,最后一次因为抛出异常而回滚
而事实上,运行结果为所有对于transferA方法的调用均回滚
原因在于将transfer和transferA方法写在了同一个类中
如上图所示 将被调用的transferB方法写入另一个类中,就能达到循环中被提交的各transferB不回滚,最后一次回滚
另外,事务一般用于数据库操作中,传统的文件写入,对象赋值并不会随事务回滚而回滚
当然,Spring事务管理器也可以扩展到回滚文件系统的操作
在上述示例中,FileSystemService 类使用了 @Transactional 注解,以指示该类的方法将在事务中执行。在 deleteFile 方法中,我们执行了文件系统的操作(在此示例中是删除文件),然后通过抛出运行时异常来模拟回滚场景。
为了让Spring能够处理文件系统资源,我们使用了ResourceLoader来加载文件资源。通过使用getResource方法,我们可以获取对应文件的Resource对象,并进一步处理文件系统操作。