gpt4 book ai didi

java - Spring数据源事务管理器不回滚

转载 作者:行者123 更新时间:2023-11-30 05:05:30 25 4
gpt4 key购买 nike

<!-- Data source definition -->
<bean id="dataSourceWebsube"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url.websube}"
p:username="${jdbc.username.websube}" p:password="${jdbc.password.websube}" />

<bean id="jdbcTemplateWebsube" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSourceWebsube" />
</bean>

<!-- Transaction manager, actually this one is useless since the Transaction Manager Bean is already called transactionManager -->
<tx:annotation-driven transaction-manager="transactionManager"/>

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

public class Test
{
@Transactional
public static void testTranscational(JdbcTemplate jdbcTmpl)
{
String sql = null;
sql = "INSERT INTO NBSM.INT_RTLNOUTBOUND_PRODUCTS(BASEPRODUCTCODE)VALUES(1)";
jdbcTmpl.update(sql);
throw new RuntimeException();
}

public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
JdbcTemplate jdbcTmpl = (JdbcTemplate) ctx.getBean("jdbcTemplateWebsube");
testTranscational(jdbcTmpl);
}
}

你好,

我正在尝试测试 spring 的事务管理功能,但我无法让它工作。我已经尝试解决这个问题几个小时了,但没有成功。

上面你可以看到相关的config xml定义和dao测试类。即使当我使用调试级别进行日志记录时,也没有回滚机制的足迹。

任何帮助将不胜感激

最佳答案

这是因为Spring AOP只能:

  • a) 使用 Spring 管理的 Bean
  • b) 使用非静态方法
  • c) 仅在调用 Spring AOP 代理时才考虑(您需要从其他 bean 调用该 bean,而不是从其本身调用该 bean)

a) 和 b) 是你的错误,你需要改正它。 -- 为了克服 c) 的问题,我强烈用 AspectJ 编译时挥手替换 Spring AOP。

如果我是对的,那么即使是事务处理(由 @Transational 进行)也一定无法正常工作。

需要由其他人检查:

我从未见过@TransactionalJdbcTemplate结合使用,所以我怀疑这是否有效。 -- 但我可能错了。

关于java - Spring数据源事务管理器不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5233413/

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