为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:win10
【CPU】:x86
【问题描述】*:jdbc连接池无法并发,在调用一次getconnection并释放资源后,再次调用时报错
代码如下:String sql = "SELECT SQL_CON from SQL_TABLE where SQL_ID = " + sql_id + “;”;
Map rs = DmsqlUtil.exeSqlSelect(sql);
System.out.println(“loading success”);
String sql2 = “SELECT SQL_CON FROM SQL_TABLE WHERE SQL_ID = ‘222’;”;
Map result = DmsqlUtil.exeSqlSelect(sql2);
报错信息如下:java.sql.SQLException: Data source is closed
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2087)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563)
at rbyl.it.fundsupvis.comm.DmsqlUtil.getConnection(DmsqlUtil.java:77)
at rbyl.it.fundsupvis.comm.DmsqlUtil.exeSqlSelect(DmsqlUtil.java:244)
建立连接池时使用的是basicDatasource,代码如下:
private static BasicDataSource ds;
ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(uri);
ds.setUsername(username);
ds.setPassword(pwd);
完整报错信息截图:
第一次调用数据库链接成功:
有人能帮忙解决一下么?研究了好几天了,一点头绪也没有~
本以为是资源释放后需要时间重新连接,但是中间增加了延迟后依旧报错,现在完全不明白了:
String sql = "SELECT SQL_CON from SQL_TABLE where SQL_ID = " + sql_id + “;”;
Map rs = DmsqlUtil.exeSqlSelect(sql);
System.out.println(“loading success”);
try {
Thread.sleep(10000); //delay the code for 2 secs
} catch(InterruptedException ex) { //and handle the exceptions
Thread.currentThread().interrupt();
}
String sql2 = “SELECT SQL_CON FROM SQL_TABLE WHERE SQL_ID = ‘222’;”;
Map result = DmsqlUtil.exeSqlSelect(sql2);
问题已解决,原因可能是连接池不适配,从dbcp更换为druid之后,问题解决
尝试mysql 和 starrocks的连接池时没问题,是可以正常使用的