gpt4 book ai didi

java - Spring事务管理

转载 作者:行者123 更新时间:2023-12-04 06:08:17 26 4
gpt4 key购买 nike

在 java Spring 中,我面临一个关于事务回滚的问题。

例子:

我的代码中有 3 个 DAO(A、B、C)。全部扩展JDBCTemplate :

@Transaction(propagation=new_required)
public void serviceClassProc() throws Exception {
A.db1();
B.db2();
C.db3();
}

如果我在 B.db2() 中抛出异常,现在使用上面的代码,没有任何东西回滚。

现在如果我修改 B.db2如下:
@Transaction(propagation=nested,rollbackon=Exception.class)
public void db2() throws Exception{
...
throw new Exception();

}

然后调用 serviceClassProc() , 只有 B.db2 中的交易, 被回滚。

我想要一个实现,其中 serviceClassProc() 内的所有事务回滚。

这是我正在使用的两种配置:
<bean id="bonddao" class="com.marki.bonds.staticdata.dao.MuniStaticDataDaoImpl"> <property name="dataSource" ref="c3p0DataSource" /> </bean> <bean id="dcldao" class="com.bonds.staticdata.dao.DclSettingsDaoImpl"> <constructor-arg ref="c3p0DataSource" /> </bean> <bean id="batchlogdao" class="com.bonds.staticdata.dao.MuniFeedHandlerBatchLogDaoImpl"> <constructor-arg ref="c3p0DataSource" /> </bean>

<bean id="bondsApplication" class="com.markit.bonds.staticdata.service.MuniRefDataSyncApp"> <property name="refdataService" ref="refDataSynchService" /> <property name="mailService" ref="mailSender"></property> <property name="batchLogger" ref="batchlogdao"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="c3p0DataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" />

我哪里错了?让 3 个 DAO 都扩展 JDBC 模板有错吗?它们都应该共享相同的 JDBCTemplate 吗?

最佳答案

您应该添加 rollbackon=Exception.class到您的服务方法的注释,并从 DAO 方法中完全删除事务注释。在 DAO 级别进行事务控制是一个坏主意。

关于java - Spring事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8081551/

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