tomcat连接池,重复多次调用方法出错: Connection is closed
配置了一个tomcat连接池,
然后多次重复调用下面方法getStaticEntiy() ,部分能获取数据,部分报错误:java.sql.SQLException: Connection is closed
大家帮忙看看,是什么原因导致的?看看有什么优化方法 ?谢了!!
--获取连接池--
- Java code
public class DBPool{ private static DataSource pool; static { Context env = null; try { env = (Context) new InitialContext().lookup("java:comp/env"); pool = (DataSource) env.lookup("jdbc/DBpool"); if(pool == null) System.err.println("'DBpool' is an unknown DataSource"); } catch (NamingException ne) { ne.printStackTrace(); } } public static DataSource getPool() { return pool; }}--getStaticEntity() 方法:--
- Java code
public byte[] getStaticEntiy(String pmname, int scalesize, float x, float y) { byte[] bContent = null; try { conn = DBPool.getPool().getConnection(); //获取连接池中的链接 bContent = scaledao.getStaticEntiy(pmname, scalesize, x, y, conn); //这是一般的从数据库读取流数据的方法 } catch (SQLException e) { e.printStackTrace(); } finally { if(conn!=null){ try { conn.close(); //释放链接 } catch (SQLException e) { e.printStackTrace(); } } } return bContent; }[解决办法]
conn = DBPool.getPool().getConnection(); //获取连接池中的链接
-----------------------------------------------------
在这个论坛上我也说过很多次了,如果没有很高的面向对象程序设计水平,请不要把数据库连接对象:
Connection, PreparedStatement, ResultSet 等设为成员变量!因为设成成员变量在多个请求同时访
问时会产生严重的问题(大量的数据库连接无法释放),特别是在设计不是很好的情况下。
因此建议将这些对象置为局部变量。