gpt4 book ai didi

java - 如何配置在 Spring + JDBC 中关闭自动提交?

转载 作者:IT老高 更新时间:2023-10-28 13:56:23 31 4
gpt4 key购买 nike

我在使用 Spring 和 JDBC,发现它是自动提交的。

如何在 spring-servlet.xml 中配置将其关闭?

这是我当前的配置:

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
p:password="${jdbc.password}" />

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

最佳答案

看来我的配置漏掉了这一行:

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

然后,在我的服务类中,我使用@Transactional 注释。例如

@Service
class CompanyServiceImpl implements CompanyService{
@Autowired
private CompanyDAO companyDAO;

@Transactional
public void addCompany(Company company) {
companyDAO.addCompany(company); // in here, there is JDBC sql insert
companyDAO.addCompany_fail(company); // just for test
}
}

如果 addCompany_fail() 发生异常,第一个 addCompany() 也将被回滚。

我按照这个文档来了解 Spring 中事务是如何控制的。 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html

我按照此文档了解如何在 Spring 中使用 JDBC 进行编码。 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html

我也读过这个(免费)http://www.infoq.com/news/2009/04/java-transaction-models-strategy .它真的很好。我对大多数人不了解(或不关心)交易的作者有同感。

PS:似乎很多人误解了使用这样的 Hibernate/Spring 框架只是为了避免 JDBC 和事务控制的复杂性。许多人认为“JDBC 和 Transaction 太复杂了,只需使用 Hibernate 就可以忘记这两个”。网上很多关于 Spring+Hibernate 或 Spring+JDBC 的例子似乎根本不关心事务。我觉得这是一个糟糕的笑话。交易太严肃了,不真正理解就任凭事情处理。

Hibernate 和 Spring 是如此强大和如此复杂。然后,正如有人所说,“权力伴随着责任”。

更新:2013-08-17:这里有关于交易的好例子http://www.byteslounge.com/tutorials/spring-transaction-propagation-tutorial .但是,这并不能说明如果要使用 REQUIRES_NEW,为什么需要创建另一个类(否则会遇到这个问题 Spring Transaction propagation REQUIRED, REQUIRES_NEW,似乎 REQUIRES_NEW 并没有真正创建新事务)

更新:2018-01-01:我在这里创建了一个带有 Spring Boot 1.5.8.RELEASE 的完整示例 https://www.surasint.com/spring-boot-database-transaction-jdbi/以及这里的一些基本实验示例https://www.surasint.com/spring-boot-connection-transaction/

关于java - 如何配置在 Spring + JDBC 中关闭自动提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649318/

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