从spider回tulip的接口,这两天主要有三个错误:
1.ora-01000.游标数超过了最大限制.oracle默认是300个.应用程序在使用connection.prepareStatement的时候,会打开数据库中的游标.如果没有正确关闭就会耗尽数据库的游标资源.但现在我在使用的地方都用在finally中关闭了resultSet和prepareStatement,还是报这个错.不知道应该怎么解决了.先把oracle的open cursor调大一些试试吧.
2.事务管理的问题.spider的某个单有三条明细,结果传到tulip中只有1条明细过来了.怎么会这样呢?虽然是跨数据库,但就算在只在tulip的部分,也不应该出现这种情况啊.下午好好看看
3.回tulip的收货单,在取单号的时候,居然取了一条已经使用过的单号.这个下午也要查查.
-----第1个问题已经查出来了,是代码里面没有正确关闭statement.查找此类错误的方法是:首先在oracle的v$open_cursor视图中查找占用游标最多的sql_text(或者hash_value).如果sql_text的长度不足够来判断,则通过v$open_cursor中的hash_value和v$sqlarea中的hash_value来关联查找完整的sql.
--第2个问题查出来了,是在dao里面用了try,catch,finally.catch把异常给抓住了,没有往上抛,所以spring在manager层管理的事务就捕获不到异常,也就不会回滚.导致部分明细保存了.解决方法就是把catch给去掉.但我还有个疑惑:我在catch里写了一个throw new RuntimeException,为什么manager还是捕捉不到异常呢?
--第3个问题查出来了,是因为tulip的出入库单是通过tulip接口中TulipConnection.java中用jdbc取的,其中url是写死在代码中.所以中间因为忽略了这个问题,有时候用的正式tulip的连接,有时候用的测试的tulip的连接,导致单号重复的问题.
1 条评论:
开张大吉啊
发表评论