Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

Apache Tomcat 에서 Connection Pool 의 정보를 얻는 방법

제목

Apache Tomcat 에서 Connection Pool 의 정보를 얻는 방법

1. org.apache.tomcat.dbcp.dbcp2.BasicDataSource 에 대해서

org.apache.tomcat.dbcp.dbcp2.BasicDataSource는 (javax.sql.DataSource 와 비교해서) 더 많은 메소드들을 제공하고 있고, 그 중에서는 사용중(active)이거나 대기중(idle)인 연결의 갯수와 같이 Connection Pool 의 사용현황에 관한 것들도 있다.

String source = "java:/comp/env/jdbc/graha";
javax.naming.InitialContext cxt = new javax.naming.InitialContext();
BasicDataSource ds = (BasicDataSource)cxt.lookup(source);
ds.getNumActive(); //사용중인 연결의 갯수
ds.getNumIdle(); //대기중인 연결의 갯수
ds.getMinIdle(); //대기중인 연결의 갯수의 최소값
ds.getMaxIdle(); //대기중인 연결의 갯수의 최대값
ds.getMaxTotal(); //연결의 갯수의 최대값

2. 여러개의 Connection Pool 현황을 조회하는 jsp 소스 코드

<%
String[] jndis = new String[] {
"jdbc/graha",
"jdbc/graha_sample"
};
%>
<%
if(jndis != null && jndis.length > 0) {
%>
<style>
table.datasource td {
text-align:center;
height:25px;
}
table.datasource td.jndi {
text-align:left;
}
table.datasource td.total {
font-weight:bold;
}
</style>
<table class="datasource">
<tr>
<th class="jndi">JNDI</th>
<th class="NumActive">Num Active</th>
<th class="NumIdle">Num Idle</th>
<th class="MinIdle">Min Idle</th>
<th class="MaxIdle">Max Idle</th>
<th class="MaxTotal">Max Total</th>
<th class="MaxOpenPreparedStatements">Max Open Prepared Statements</th>
</tr>
<%
int numActive = 0;
int numIdle = 0;
javax.naming.InitialContext cxt = new javax.naming.InitialContext();
org.apache.tomcat.dbcp.dbcp2.BasicDataSource ds = null;
for(int i = 0; i < jndis.length; i++) {
String source = null;
if(jndis[i].startsWith("java:")) {
source = jndis[i];
} else {
source = "java:/comp/env/" + jndis[i];
}
try {
ds = (org.apache.tomcat.dbcp.dbcp2.BasicDataSource)cxt.lookup(source);
} catch (javax.naming.NamingException e) {
ds = null;
}
if(ds == null) {
%>
<tr>
<td colspan="7">Error : <%=jndis[i]%></td>
</tr>
<%
} else {
numActive += ds.getNumActive();
numIdle += ds.getNumIdle();
%>
<tr>
<td class="jndi"><%=jndis[i]%></td>
<td class="NumActive"><%=ds.getNumActive()%></td>
<td class="NumIdle"><%=ds.getNumIdle()%></td>
<td class="MinIdle"><%=ds.getMinIdle()%></td>
<td class="MaxIdle"><%=ds.getMaxIdle()%></td>
<td class="MaxTotal"><%=ds.getMaxTotal()%></td>
<td class="MaxOpenPreparedStatements"><%=ds.getMaxOpenPreparedStatements()%></td>
</tr>
<%
}
ds = null;
}
cxt.close();
cxt = null;
%>
<tr>
<td class="jndi total">Total</td>
<td class="NumActive total"><%=numActive%></td>
<td class="NumIdle total"><%=numIdle%></td>
<td class="MinIdle total"></td>
<td class="MaxIdle total"></td>
<td class="MaxTotal total"></td>
<td class="MaxOpenPreparedStatements total"></td>
</tr>
</table>
<%
}
%>
제목

첨부파일