欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

弹簧和线程:事务

发布时间:2023/12/3 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 弹簧和线程:事务 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为了能够在我们的线程中使用事务,我们需要了解事务如何在spring中工作。 spring中的事务信息存储在ThreadLocal变量中。 因此,这些变量特定于单个线程上正在进行的事务。

当涉及由单个线程运行的动作时,事务将在分层调用的Spring组件之间传播。

因此,在产生线程的@Transactional带注释的服务的情况下,事务不会从@Transactional服务传播到新创建的线程。 结果将是一个错误,指示缺少事务。

由于在线程内进行的操作需要通过jpa访问数据库,因此必须创建一个新事务。 通过查看@Transactional 文档,我们可以获得有关事务传播类型的更多信息。 @Transactional的默认传播模式为REQUIRED 。

因此,通过使用@Transactional注释方法,将创建一个新事务并将其传播到从我们的线程调用的其他服务。

例如,我们的async方法可以注释为Transactional

@Async @Transactional public void executeTransactionally() {System.out.println("Execute a transaction from the new thread"); }

从Runnable类的run函数调用的方法也是如此。 尽管异步的使用非常简单,但是在后台,它会将调用包装在Runnable中,然后将其分派给执行者。

总结一下在Spring使用线程和事务时,应该格外小心。 还请记住,事务不能在线程之间传递。 最后但并非最不重要的一点是,确保@Async和@Transactional函数是公共函数,并通过将在调用之前进行必要操作的代理。

翻译自: https://www.javacodegeeks.com/2017/10/spring-threads-transactions.html

总结

以上是生活随笔为你收集整理的弹簧和线程:事务的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。