【问题标题】:Spring Transaction with AspectJ使用 AspectJ 的 Spring 事务
【发布时间】:2012-11-21 13:32:49
【问题描述】:

我在 Spring 中遇到了 @Transaction 的问题。 基本上,不会使用以下消息创建事务:

由于没有正在进行的交易而延迟身份插入

我在 Spring AOP 论坛中对问题进行了完整描述

http://forum.springsource.org/showthread.php?132612-Transaction-management

任何建议将不胜感激!

斯特凡诺

【问题讨论】:

  • 能否请您发布完整的堆栈跟踪。 - 主要是为了确保我们在正确的地方搜索。因为代码看起来没问题。

标签: spring aop aspectj transactional


【解决方案1】:

在您的代码中,您已经定义了这样的服务:

@Service
@Configurable
public class ServiceImpl<T> implements Service<T> {
@Override
@Transactional
public T save(T entity) {
          ....
    }
}

我不知道你为什么使用@Configurable 注解。如果您不需要它们(也就是说,如果您不通过 new 创建此服务的实例),我会删除它们。

原因是我记得spring文档说@Configurable启用注入,但它没有说@Configurable启用的加载时间编织支持

【讨论】:

  • 您对@Configurable 的看法是正确的,而@Service 注释是@Component 的特化。然而,正如文档所述,由于方法级别的 @Transactional 注释,事务方面应该编织。
  • 我忘了...我尝试了您的建议,但结果没有改变。
【解决方案2】:

找到了解决办法。

问题出在配置中。我添加了两个元素context:spring-configuredcontext:load-time-weaver,这意味着两个不同的东西。第一个激活 AspectJ compile time weaving(我不明白),第二个激活 AspectJ load time weaving。我认为这两个元素不能很好地协同工作。

我决定使用编译时编织器,并且(经过一番挣扎......)我发现(显然)外部 jar 没有使用这种配置编织,仅仅是因为它们尚未构建。

最简单的解决方法是修改aspectj-maven-plugin的配置(在POM.xml中)在configuration节点下添加:

&lt;weaveDependencies&gt;
&lt;weaveDependency&gt;
&lt;groupId&gt;GROUP-ID&lt;/groupId&gt;
&lt;artifactId&gt;ARTIFACT-ID&lt;/artifactId&gt;
&lt;/weaveDependency&gt;
&lt;/weaveDependencies&gt;
对于您需要编织的每件文物。

现在交易工作正常!

@Ralph:非常感谢您抽出宝贵时间!

问候,

斯特凡诺

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多