注:操作有风险,请自行备份好数据,本教程仅供参考。
一. 参考
1. 教程-JNDI数据源的配置
2. 教程-详细JNDI数据源配置说明
3. 官网-doc-commons-dbcp 连接池API
4. 教程-tomcat自带连接池dbcp配置及优化说明
5. 官网-doc-tomcat-8.5 JNDI Resources How-To
6. 教程-Apache Commons-pool源码分析
二. 操作流程
1. Tomcat: 添加 jdbc 驱动(ojdbc8.jar)
export TomcatPath = "~/Tomcat 9.0"
cp ~/ojdbc8.jar $TomcatPath/lib
2. Tomcat: 修改 server.xml ,
在GlobalNamingResources节点下添加JNDI数据源
注意: xml元素内部不能使用注释, 请在复制时将其去除
vim $TomcatPath/conf/server.xml
<!--配置Oracle数据库的JNDI数据源-->
<Resource name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
username="***"
password="***"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@***:orcl"
<!--连接数配置-->
maxTotal="150" <!--最大活动连接数-->
maxIdle="-1" <!--最大空闲连接数, 此处不做限制, 空闲连接由空闲连接回收器缓慢回收-->
minIdle="10" <!--最小空闲连接数-->
maxWaitMillis="10000" <!--最大等待时间 -->
<!--连接有效性验证/空闲连接回收-->
<!--validationQuery="" 验证链接使用的SQL语句-->
testOnBorrow="false" <!--借出连接时不要测试,否则很影响性能-->
testWhileIdle="true" <!--空闲连接回收器(如果有)检测通过后,是否验证连接的有效性,连接无效将被从池中去除。-->
timeBetweenEvictionRunsMillis="30000" <!--每30秒运行一次空闲连接回收器-->
numTestsPerEvictionRun="3" <!--在每次空闲连接回收器线程(如果有)运行时检查的连接数量-->
minEvictableIdleTimeMillis="1800000" <!--池中的连接空闲30分钟后被回收-->
softMinEvictableIdleTimeMillis="1800000" <!--池中的连接空闲30分钟后被回收, 但至少“minIdle”个连接将保留在池中-->
<!--连接泄漏回收-->
<!--如果应用程序长时间不将连接返回到池中, 则连接被称为已放弃, 池可以自动关闭此类连接并将它们从池中删除-->
removeAbandonedOnBorrow="true" <!--当连接被借用时且可用连接数少于3个时, 是否从池中删除废弃的连接-->
removeAbandonedTimeout="180" <!--180秒,假定借用的连接被放弃之前的秒数-->
/>
3. Tomcat: 修改 context.xml ,
在Context节点下配置jndi数据源
vim $TomcatPath\conf\context.xml
<ResourceLink global="jdbc/oracle" name="***" type="javax.sql.DataSource" />
4. Web应用: 启用JNDI
应用内部具体的使用方法, 请根据实际情况自行查阅资料, 在此不做介绍, 以下为部分使用过程中常用的参数
<JNDIList>
<JNDI name="***">
<property name="type" value="1"/>
<property name="batchSize" value="1000"/>
<property name="lookup" value="java:/comp/env/***"/>
</JNDI>
</JNDIList>
5. 其它: 监测
#查看连接数
netstat -aon|findstr "1521"