说说如何通过 JNDI 让 Tomcat 使用 Druid 连接池

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,就可以看到监控界面啦:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值