Java spring使用普通jdbc和事务管理-事务不是maintane
我正在用jersey rest Webservice处理Spring。我使用spring事务支持进行事务管理。但它不起作用。以下是我的配置: datasource.xmlJava spring使用普通jdbc和事务管理-事务不是maintane,java,spring,spring-mvc,transactions,spring-jdbc,Java,Spring,Spring Mvc,Transactions,Spring Jdbc,我正在用jersey rest Webservice处理Spring。我使用spring事务支持进行事务管理。但它不起作用。以下是我的配置: datasource.xml <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="j
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost:3306/test" p:user="pass" p:password="root"
p:acquireIncrement="5" p:idleConnectionTestPeriod="60" p:maxPoolSize="100"
p:maxStatements="50" p:minPoolSize="10" />
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- Enable Annotation based Declarative Transaction Management -->
<tx:annotation-driven proxy-target-class="true"
transaction-manager="transactionManager" />
来电者
Product product= new Product();
customerDao.insertCustomer(product.getCustumer());
prderDao.insertOrder(product.getOrder());
ctx.close();
ISSUE>在product.getOrder中引发异常后,数据仍保留在customer表中
有人能帮帮我吗。在advanced中感谢您,为什么要维护该交易?
@Transactional
给出了事务边界,即从输入方法开始,在方法cal之后结束。因此,在insertCustomer
之后,事务结束。调用方(通常是服务层)应该是事务性的,而不是dao层。@M.Deinum i want事务应该在“customerDao.insertCustomer(product.getcustomer());”之前启动并在“prderDao.insertOrder(product.getOrder());”之后结束所以,若在insertOrder中抛出错误,那个么insert customer应该回滚,并且根据我的阅读,在dao和服务层使用@Transactional,它将使用需要传播的默认传播行为。所以,若问题发生在第二个事务中,那个么第一个事务将被回滚。我在您提供的内容中看到的是,只有DAO被注释,并没有其他注释。让我有点害怕的是ctx.close()
,这让我想知道您是否每次需要dao时都在构建一个新的ApplicationContext
,而不是使用依赖注入。另外,Jersey托管bean上的@Transactional
也不起作用,它只在Spring托管bean上起作用。很抱歉,这只是我的应用程序的示例代码,因为我无法将代码粘贴到internet上。我的应用程序是web应用程序。我用@Transactional注释了serviceObject和Dao对象。以及在服务中调用多个dao方法。我希望在哪里管理交易
Product product= new Product();
customerDao.insertCustomer(product.getCustumer());
prderDao.insertOrder(product.getOrder());
ctx.close();