1
我有一個應用程序在Tomcat 7上運行,使用Spring,Mybatis和Mybatis-spring。SqlSessionFactory必須使用SpringManagedTransactionFactory才能使用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上設置,我願意對它進行調整。
這個答案救了我從不眠之夜,謝謝很多。 –