从tomcat 的数据源组件获得连接,自动管理事务回滚

本文探讨了Java应用程序中使用Oracle数据库时遇到的手动提交事务不触发回滚的问题,并通过实验对比了直接连接数据库与通过Tomcat数据源获取连接两种情况下的事务行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:java代码事务处理中,事务属性设置为手动提交,但是居然没有发现事务回滚,只有提交动作!服务器为tomcat,配置数据源为oracle!

 

疑问有二:1.如果一个事务调用oarcle存储过程正常,但是java代码有抛出异常,此代码能否自动回滚?

             2.如果一个事务中调用两次存储过程,第一个无误,第二个plsql代码有误,那么这个事务能否回滚?

 

针对这两个疑问,我手动写了些测试用例,但是是直接连接数据库的!

事实证明:如果没有回滚动作,那么事务是不正常执行的!

于是推理出,那些没有回滚的java代码是不严谨的!

 

但是当选用tomcat配置数据源获得连接时,似乎是没有事务异常,与之前的结论不符!

难道tomcat可以针对抛出异常的代码,会自动回滚事务?因为没有底层代码,所以这是有可能的!

 

但是当我不关闭数据库连接时,因为抛出异常,没有正常提交时,数据库肯定不会自动回滚的!

于是猜测:tomcat数据源获得的连接,close()函数并没有直接关闭数据库连接,而只是把它放到连接池中!

而且不会有提交这个动作!

 

这个是否是与close函数不符的地方呢?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值