And*_*gin 11 transactions spring-mvc
考虑我有一个控制器方法get(),它调用一些使用数据库的服务方法.
使整个控制器方法成为事务性或只是每个服务方法是否正确?
在我看来,我们必须进行get()交易,因为它执行相关的操作.
这完全取决于您,以及您如何解释自己的业务逻辑.
Spring并不关心您放置事务边界的位置,当然也不限制您将它们放在DAO类上.
所以是的,添加@Transactional到您的控制器方法是完全有效的.
我更喜欢只在事务上使用需要事务的服务方法,并控制服务中的事务性而不是控制器中的事务性.您可以创建一个服务方法来使用其他服务方法,并使用spring事务管理事务,并在@Transactional注释中进行传播.
@Transactional(propagation =...)
Run Code Online (Sandbox Code Playgroud)
编辑
如果我有2个方法,例如saveUser()和saveEmail()(因为我将电子邮件存储在数据库中以便稍后发送 - 就像一个队列)我会在我的服务中创建一个方法saveUserAndSendEmail(用户用户),它将是事务性的.此方法将在@Repository组件中调用saveUser和saveEmail(),因为它们处理数据库.所以我会把它们放在@Repository组件中处理数据库的方法,然后我控制@Service组件中的事务性.然后,控制器只需要担心在需要时提供数据和呼叫.但我做了一个事务,因为我不想在数据库中提交更改,直到整个方法成功执行.
但这是我经常使用的风格,我不是说这一定是要走的路.
| 归档时间: |
|
| 查看次数: |
8110 次 |
| 最近记录: |