gpt4 book ai didi

java - SqlSessionFactory 必须使用 SpringManagedTransactionFactory 才能使用 Spring 事务同步

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:44 28 4
gpt4 key购买 nike

我有一个在 Tomcat 7 上运行的应用程序,使用 Spring、Mybatis 和 .. Mybatis-spring。

这是 servlet-context.xml 中数据库和事务的设置:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDS" />
<!-- enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:maps/*.xml" />
<property name="transactionFactory">
<bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property>
</bean>
<mybatis:scan base-package="com.domain.dao.mappers" />
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

当我运行一个使用 SqlSession 的方法时,我得到的错误如下:

org.springframework.dao.TransientDataAccessResourceException: SqlSessionFactory must be using a SpringManagedTransactionFactory in order to use Spring transaction synchronization
at org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:136)

我做错了什么?

实际上,我的目标只是在此设置中使用事务。我认为我不一定需要 JTA。但如果在 Tomcat 上设置起来足够容易,我愿意尝试一下。

最佳答案

我自己解决了这个问题。非常简单的解决方案。如果有人遇到同样的问题,我需要做的就是从 sqlSessionFactory bean 中删除以下内容:

<property name="transactionFactory">
<bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property>

我一定是以某种方式输入它,以为我需要它,但显然只有在您不使用 CMT(容器管理事务)时才需要它。

关于java - SqlSessionFactory 必须使用 SpringManagedTransactionFactory 才能使用 Spring 事务同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com