背景:java代码事务处理中,事务属性设置为手动提交,但是居然没有发现事务回滚,只有提交动作!服务器为tomcat,配置数据源为oracle!
疑问有二:1.如果一个事务调用oarcle存储过程正常,但是java代码有抛出异常,此代码能否自动回滚?
2.如果一个事务中调用两次存储过程,第一个无误,第二个plsql代码有误,那么这个事务能否回滚?
针对这两个疑问,我手动写了些测试用例,但是是直接连接数据库的!
事实证明:如果没有回滚动作,那么事务是不正常执行的!
于是推理出,那些没有回滚的java代码是不严谨的!
但是当选用tomcat配置数据源获得连接时,似乎是没有事务异常,与之前的结论不符!
难道tomcat可以针对抛出异常的代码,会自动回滚事务?因为没有底层代码,所以这是有可能的!
但是当我不关闭数据库连接时,因为抛出异常,没有正常提交时,数据库肯定不会自动回滚的!
于是猜测:tomcat数据源获得的连接,close()函数并没有直接关闭数据库连接,而只是把它放到连接池中!
而且不会有提交这个动作!
这个是否是与close函数不符的地方呢?