近日,为了提高程序执行效率,使用存储过程将批量记录写入数据库。
在代码实现中,遇到几个问题:
1 将多条记录数据,封装成Oracle所需的ARRAY类型时,用到Connection。我所使用的数据连接,是由Spring配置org.apache.commons.dbcp.BasicDataSource生成连接的。从这一数据源中,从JdbcDaoSupport得到连接使用时,报对象造型错误。经跟踪,发现JdbcDaoSupport中得到的Connection,并不是Oracle数据库的连接类型。至此改用oracle.jdbc.pool.OracleDataSource提供数据源。
2 改用oracle.jdbc.pool.OracleDataSource后,存储过程调用正常。但在随后的压力测试中,发现频繁获取连接时,间断出现得不到连接的报错信息。经查找,问题出在Spring对oracle.jdbc.pool.OracleDataSource数据源的维护上,Spring使用完这个数据源提供的数据连接后并不进行关闭操作,改用org.apache.commons.dbcp.BasicDataSource没有这个问题。
所以,oracle.jdbc.pool.OracleDataSource配置的数据连接源,需要显示的关闭连接。