@Transactional注释不起作用

时间:2010-10-12 17:58:29

标签: java spring transactions

好的,够了。我无法做到这一点。我是Spring交易的新手,并在我的服务中使用@Transactional注释来管理交易。下面是我的spring bean配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">

  <tx:annotation-driven transaction-manager="txManager"/>

  <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
  </bean>

  <jee:jndi-lookup id="dataSource" jndi-name="jdbc/myapp"/> 

  <!-- other <bean/> definitions here -->

</beans>

我注释了我的服务:

@Transactional
public class MyServiceImpl implements MyService {
...
}

我注意到两件事

  1. 我在DAO [使用DataSourceUtils.getConnection(dsName)]中获得的连接启用了自动提交[true]。
  2. 就我调试而言,在我的服务方法调用期间没有开始任何事务。
  3. 有人有这个问题吗?

1 个答案:

答案 0 :(得分:0)

我自己使用Hibernate和HibernateTransactionManager,所以我不太熟悉JDBC事务管理器的工作方式。您是否检查过callstack以查看TransactionInterceptor是否在那里?如果是,则事务注释正在运行,您可能只是缺少其他内容。如果你没有找到它,是什么让你觉得它不起作用?为了消除这一点,您是否在JDBC配置中明确设置了一个禁用自动提交的设置?