如何通过 Servlet 示例监控 Tomcat JDBC 连接池

本文介绍如何通过MonitorServlet监控Tomcat连接池,展示活跃、空闲连接,并利用JMX和JConsole进行实时管理。实例代码和配置文件说明了如何获取和解读关键池参数。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

通过这个例子,你可以从一个 tomcat 连接池中找出活跃的、空闲的连接等等。这对于了解您是否没有关闭所有连接或是否要仔细检查池的工作方式非常有用。

MonitorServlet.java

import java.io.PrintWriter;
import java.lang.management.ManagementFactory;
import java.util.Set;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/poolmonitor")
public class MonitorServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.println("<!DOCTYPE html>");
        writer.println("<html>");
        writer.println("<body>");
        writer.println("<p><h1>Tomcat Pool</h1></p><p>");
        try {
            MBeanServer server = ManagementFactory.getPlatformMBeanServer();
            Set<ObjectName> objectNames = server.queryNames(null, null);
            for (ObjectName name : objectNames) {
                MBeanInfo info = server.getMBeanInfo(name);
                if (info.getClassName().equals(
                        "org.apache.tomcat.jdbc.pool.jmx.ConnectionPool")) {
                    for (MBeanAttributeInfo mf : info.getAttributes()) {
                        Object attributeValue = server.getAttribute(name,
                                mf.getName());
                        if (attributeValue != null) {
                            writer.println("" + mf.getName() + " : "
                                    + attributeValue.toString() + "<br/>");

                        }
                    }
                    break;
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        writer.println("</p></body>");
        writer.println("</html>");
    }
}

Context.xml(Tomcat 池示例)

    <Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver"
       maxActive="50"
       maxIdle="5"
       minIdle="1"
       maxWait="30000"
       validationQuery="select 1 from dual"
       validationQueryTimeout="3"
       testWhileIdle="true"
       testOnBorrow="true"
       testOnReturn="false"
       validationInterval="30000"
       timeBetweenEvictionRunsMillis="30000"
       removeAbandoned="true"
       removeAbandonedTimeout="600"
       name="jdbc/test"
       password="test"
       type="javax.sql.DataSource"
       factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
       url="jdbc:oracle:thin:@myoracleexample:1521:MYORACLE"
       username="test"
     />

 

 

笔记

 

 

 

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值