[问题] CONNECTION POOL的问题

楼主: PowerKid (暴力小孩)   2018-08-09 13:51:53
各位大大好 有CONNECTION POOL的问题想请教大家
我现在建立了两个CONNECTION POOL 的 DataSource 一个是连ORACLE 一个是连SQL
SERVER
org.apache.tomcat.jdbc.pool.DataSource datasource1 = new
org.apache.tomcat.jdbc.pool.DataSource();//ORACLE
org.apache.tomcat.jdbc.pool.DataSource datasource2 = new
org.apache.tomcat.jdbc.pool.DataSource();//SQL SERVER
程式码约如下
public class XXXXXXXXServlet extends HttpServlet {
Connection conn1 = null;
Connection conn2 = null;
try{
conn1=datasource1.getConnection();
读取ORACLE的资料做事情
} catch (Exception e) {
} finally{
conn1.close();做完关闭
}
//最后连接SQL SERVER 关闭数据库
try{
conn2=datasource2.getConnection();
将每次连线ORACLE的资料作纪录 存在SQLERVER
} catch (Exception e) {
} finally{
conn2.close();做完关闭
}
}
但现在遇到一个问题,有时候datasource1达到最大使用量了,因此后面的进来Servlet的
连线无法读取到数据库
但是最后datasource2又会将每次连线做纪录,但因为datasource1的POOL满了读取不到资
料,造成datasource2纪录的值为空值,
请问该怎么解决?
让datasource1排队的连线排到之后datasource2再去做纪录
不要datasource2直接做纪录 造成有空值的状况发生
作者: inxbone (高级少量糖果)   2018-08-09 19:38:00
最简单不是设flag 然后datasource1 catch到exception 改变flag datasource2 判断flag决定要不要做
作者: kogrs (kogrs)   2018-08-10 03:13:00
1.一开始就同时要两个connection,降低要不到的可能性2.向第二个ds要connection时,设计retry 机制,降低问题发生3.第二个ds看起来只是log,那就把这段用另外的thread处理也就是异步处理就好
作者: adrianshum (Alien)   2018-08-10 09:54:00
Exception 还是不要随便catch-and-ignore 比较好, 除此以外应该可以用try-resource 一并取得两个connection. 一并成功取得后才工作

Links booklink

Contact Us: admin [ a t ] ucptt.com