首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @Transactional澄清

Spring @Transactional澄清
EN

Stack Overflow用户
提问于 2019-02-16 21:54:41
回答 1查看 224关注 0票数 1

对于@Transactional注释,我有很多困惑。

1)如果我只使用声明式方法,是否就足够将我的服务类/方法标记为@Transactional,或者应该创建配置bean和属性,如此白龙文章所示?

2)在某些情况下,我需要使用甚至是编程的方法,以便能够在工作流的某个特定点显式地调用刷新()。在这种情况下,以前hibernate信任的定义是强制性的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 22:07:20

如果您正在执行Spring项目,则不需要显式声明SessionFactoryPlatformTransactionManager Beans。他们会自动为你配置。

是的,将Transactional注释放在类或方法上就足够进行事务处理了。自动提交甚至应该自动关闭(为了优化目的),以防在DataSource级别上无法完成。

对于“程序”部分,您应该考虑保持在注释方面。您可以使用事务传播策略来隔离某些操作。

关于使用声明式注释方法的几个重要注意事项。

如果可能的话,请记住注释public方法。任何其他方法的可见性都不能通过Java代理或CGLIB代理来管理,因此,即使您没有注意到,这些方法也不会参与事务上下文。对于protectedprivate方法,您必须使用AspectJ。

还请记住,当使用代理时,自调用(&期待新事务)不起作用。

要使用编程方法,只需Autowire TransactionTemplatePlatformTransactionManager Bean即可。

PlatformTransactionManager允许对事务进行更多的定制,而TransactionTemplate更像是实用对象(但是可以根据需要进行建模)。

显然,不要将这两种方法混合在相同的方法调用堆栈中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54728039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档