首先,我想提一下,我完全同意只让服务层进行交易,但有时世界并不完美,而且现在我正处于这种情况的中间。 基本上我已被分配到一个具有4年以上遗留代码的精彩项目中。问题是开发人员没有遵循任何模式来引入商务逻辑,因此您可以从控制器对多个服务调用进行映像,之后对控制器进行一些额外的私有方法调用。 没有重构的预算,我们在ACID上遇到很多问题,所以我找到的唯一解决方案是使控制器具有事务性,并且如果请求/响应中间的某些内容出错,至少会有完全回滚。 问题是我不能使它有效。我会描述你的配置,看看你是否可以帮助我。 我有一个调用webmvc-config.xml的DispatcherServlet,其中我有控制器的声明
<context:component-scan base-package="com.greenvalley.etendering.web.controller**" use-default-filters="false">
<context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>
然后contextConfiguration调用我的applicationContext.xml,其中我拥有Spring配置的所有其余部分。
在阅读了这么多票后,我尝试了许多信念,例如尝试将我的控制器再次声明为应用程序上下文。
<tx:annotation-driven mode="aspectj"/> I tried with proxy as well
<context:component-scan base-package="com.greenvalley.etendering.web.controller.*" />
但仍然没有。
在我的txManager的配置中,我不做任何花哨的事情,只需添加对entityManagerFactory的引用即可
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
在我的控制器中我添加了@Transactional,但每次我向@transactional类/方法发出请求时都没有任何内容我没有看到断点进入JpaTransactionalManager doBegin方法停止
请提出任何建议!
此致