
JNDI(Java Naming and Directory Interface,Java 命名和目录接口 ) 是 SUN 公司提供的一种标准的 Java 命名系统接口, 它提供了统一的客户端 API ,通过不同的访问者来实现 JNDI 服务供应接口 (SPI),并由管理者将 JNDI API 映射为特定的命名服务和目录系统,使得 Java 应用程序可以和这些命名服务和目录服务之间进行交互 , 类似 JDBC 都是构建在抽象层上 。 JNDI 已经成为 J2EE 的标准之一,所有的 J2EE 容器都必须提供一个 JNDI 的服务 。
Druid 是阿里巴巴数据库事业部出品,以 Java 为实现语言,为监控而生的数据库连接池。
我们通过 JNDI 让 Tomcat 使用 Druid 连接池,用于监控 Tomcat 容器内应用的连接情况。
1 下载并安装 Druid
到 Maven 中央仓库中,下载最新版的 Druid jar 包(下载地址)。
放入 Tomcat 的 lib 目录,即 ${tomcat_home}/lib。
2 配置监控 servlet
在 ${tomcat_home}/conf/web.xml 中,配置监控 servlet:
<!-- Druid 监控统计 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 是否允许清空统计数据 -->
<param-name>resetEnable</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 用户名 -->
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<!-- 密码 -->
<param-name>loginPassword</param-name>
<param-value>xxx</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
这样配置之后,就可以通过以下地址访问监控登录页:http://[IP 地址][端口]/druid/index.html
其中的 loginUsername 和 loginPassword,是配置监控登录页的账号与密码。
3 配置 web 统计过滤器
配置 web 统计过滤器,它用于采集与 web-jdbc 相关联的监控数据:
<!-- web 统计过滤器 -->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<!-- exclusions:排除一些不必要的url-->
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,*.mp3,/druid/*</param-value>
</init-param>
<!-- session 统计最大个数 -->
<init-param>
<param-name>sessionStatMaxCount</param-name>
<param-value>1000</param-value>
</init-param>
<!-- 是否开启统计功能 -->
<init-param>
<param-name>sessionStatEnable</param-name>
<param-value>true</param-value>
</init-param>
<!-- 当前 session 的用户-->
<init-param>
<param-name>principalSessionName</param-name>
<param-value>xxx</param-value>
</init-param>
<!-- 监控单个 url 调用的 sql 列表-->
<init-param>
<param-name>profileEnable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
各项配置说明如下:
参数 | 说明 |
---|---|
exclusions | 用于排除一些不必要的 url ,比如网站的静态资源 。 |
sessionStatMaxCount | 需要统计 Session 的最大数量。 |
sessionStatEnable | 是否开启 session 统计功能。 |
principalSessionName | 保存在 session 中的 sessionName,就能记录当前登陆的 session 的用户。如果 session 中保存的是非 string 类型的对象,那么就需要重载 toString 方法 。 |
profileEnable | 是否监控单个 url 调用的 sql 列表。开启之后,就能在 URI 监控页签内,点击某个 URL 请求,看到这个请求所涉及的所有 SQL 列表。 |
4 配置 JNDI 数据源
在 ${tomcat_home}/conf/context.xml 中,配置 JNDI 数据源:
<Resource name="xxx" auth="Container" type="javax.sql.DataSource" factory="com.alibaba.druid.pool.DruidDataSourceFactory"
username="xxx"
password="xxx"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@xxx:1521:xxx"
filters="stat"
connectionProperties="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=2000"
useGlobalDataSourceStat="true"
defaultTransactionIsolation="READ_COMMITTED"
validationQuery="select 1 from dual"
removeAbandoned="true"
logAbandoned="true"
removeAbandonedTimeout="1800"
maxActive="20"
initialSize="5"
maxWait="60000"
minIdle="10"
timeBetweenEvictionRunsMillis="60000"
minEvictableIdleTimeMillis="300000"
testWhileIdle="true"
testOnBorrow="false"
testOnReturn="false"
poolPreparedStatements="false"
maxOpenPreparedStatements="20"
asyncInit="true"
/>
5 监控界面
启动 Tomcat 后,在浏览器中键入 http://[IP 地址][端口]/druid/index.html,就可以看到监控界面啦:

网友评论