gpt4 book ai didi

java - 使用 Spring JDBC 的简单交易?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:40 25 4
gpt4 key购买 nike

我正在开发一个使用 Spring 的 Java 应用程序 IoC和 JDBC 模板类。我有一个 DAO 类,它有 4 个方法:m1() 到 m4()。 m1 在表 t1 上执行多次插入和更新,m2 在表 t2 上执行,m3 在 t3 上执行,等等。

DAO 方法使用如下:

while(true)
{
//process & generate data

dao.m1(data1);
dao.m2(data2);
dao.m3(data3);
dao.m4(data4);

//sleep
}

我希望 4 个连续方法调用下的数据库操作是原子的,要么所有 4 个表都更新成功,要么一个都不更新。因此,如果在 m3() 中执行操作时出现错误,我想回滚在 m2 和 m1 中执行的所有更改(更新和插入)。

那么 spring 是否允许您按以下方式进行操作?

while (true)
{
//process & generate data

transaction = TransactionManager.createNewTransaction();

transaction.start()

try
{
dao.m1(data1);
dao.m2(data2);
dao.m3(data3);
dao.m4(data4);
}
catch(DbUpdateException e)
{
transaction.rollBack();
}

transaction.end();

// sleep

或者有更好的方法吗?

最佳答案

是的,Spring 允许您 programmatically control transactions .

个人比较喜欢declarative transactions使用注释,就像这样:

public void runBatchJob() {
while (true) {
// generate work
doWork(unitOfWork);
}
}

@Transactional
private void doWork(UnitOfWork work) {
dao.m1(data1);
dao.m2(data2);
dao.m3(data3);
dao.m4(data4);
}

定义 DAO 函数的地方:

@Transactional
public void m1(Data data) {
...
}

这需要在您的applicationContext.xml中:

<tx:annotation-driven/>

声明式事务可以声明需要一个事务,需要一个新的事务,支持事务等。当一个用@Transactional注解的 block 抛出一个RuntimeException时会发生回滚.

关于java - 使用 Spring JDBC 的简单交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1023907/

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