我有一个Spring & Hibernate Web应用程序,我将连接到两个数据库。Spring注释事务管理
在web.xml
我已配置了应用程序上下文的文件的路径作为以下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:config/*.xml
</param-value>
</context-param>
在那里我有config目录下三个文件
- 1-初级hibernateContext.xml
- 2- secondary-hibernateContext.xml
- 3- root-context.xml
在第一文件我已经配置主数据源,会话工厂,和事务管理器(primary_manager)
我确实在第二个文件
在第三文件中的相同的I所配置的部件扫描和交易注释配置如下
<tx:annotation-driven/>
<!-- Enable Spring annotation configuration -->
<context:annotation-config />
<!-- Scan the application for all possible Services & autowire -->
<context:component-scan base-package="net.mr2.*.service" />
<context:component-scan base-package="net.mr2.*.dao" />
我在我所配置的调度servlet作为以下
0123一个servlet上下文xml文件<annotation-driven />
<context:component-scan base-package="net.mr2.*.web" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
该服务等级被注释@service
& @Transactional(value="secondary_transactionManager", readOnly=true, rollbackFor=Exception.class)
。
我有一个控制器,其中服务是自动装配的。
从控制器我调用服务类中的三种方法(save1()
,save2()
,save3()
)。我在第三种方法中抛出异常,我认为第三种方法应该回滚,但这不会发生。
我已经打开mysql日志并检查了三个保存语句,并且我发现这些语句并未在事务中执行。我意识到,因为我没有在insert语句之前和之后发现SET AUTOCOMMIT
语句。
所以,我认为事务配置不好。
在我的设置中会出现什么问题?
你是否假设3d方法会回滚前两种方法的动作? –
你的休眠配置是什么? –