【问题标题】:Mixsing @Transactional & @Controller Semantics on a REST Api在 REST Api 上混合 @Transactional 和 @Controller 语义
【发布时间】:2012-09-30 08:10:44
【问题描述】:

我想将后端公开为“资源”(如 Restlet)并消除服务层,以便 Rest 资源可以直接与 Dao 交互。这样资源合约而不是接口。

如果事务由 Spring 在本地管理,在 Spring MVC 3 控制器上使用 @Transactional 语义是否存在问题?回滚和捕获异常有什么问题吗?

@RequestMapping(value = "/user/{userId}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@Transactional
public void updateUser(@PathVariable Long userId, @RequestBody ProfileUser user) {

   // dao update
}

spring config:
<tx:annotation-driven />
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

【问题讨论】:

    标签: spring-mvc spring-transactions


    【解决方案1】:

    我认为您可能会在这里遇到问题。默认情况下,Spring 将使用 JDK 动态代理将事务行为应用于您的方法。这依赖于您的控制器实现合适的接口,即公开 updateUser 方法的接口。 Spring上有一篇很棒的博文blog

    由于 Spring 未能在代理上找到方法,您很可能会看到错误。

    如果您告诉 Spring 使用基于 CGLIB 的代理,您可以使用上述方法。这在文档here 中有描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      相关资源
      最近更新 更多