1. 首页 > Tomcat教程 > 正文

Tomcat教程FG010-Tomcat JDBC DataSource配置与数据库连接池实战

目录大纲

Part01-基础概念与理论知识

1.1 数据库连接池简介

数据库连接池是一种管理数据库连接的技术,它通过预先创建和维护一定数量的数据库连接,减少应用程序与数据库之间的连接开销,提高系统性能。

数据库连接池的优势:

  • 减少连接创建和销毁的开销
  • 提高应用程序响应速度
  • 控制数据库连接数量
  • 统一管理数据库连接
  • 提供连接监控和管理功能

1.2 Tomcat JDBC DataSource特性

Tomcat JDBC DataSource是Tomcat提供的一个高性能数据库连接池实现,它具有以下特性:

  • 高性能:比传统的DBCP连接池更快
  • 可靠性:支持连接验证和自动重连
  • 监控:提供详细的连接池状态信息
  • 灵活性:支持多种配置选项
  • 易于集成:与Tomcat无缝集成

1.3 连接池工作原理

连接池的工作原理:

  • 初始化时创建一定数量的数据库连接
  • 应用程序从连接池获取连接
  • 应用程序使用连接进行数据库操作
  • 应用程序将连接归还到连接池
  • 连接池管理连接的生命周期

更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 环境准备

环境准备要求:

  • Tomcat 11.0.8或更高版本
  • 数据库(MySQL、PostgreSQL、Oracle等)
  • 数据库驱动
  • 适当的连接池配置参数

2.2 配置建议

连接池配置建议:

  • 根据应用负载设置适当的连接池大小
  • 配置合理的连接超时时间
  • 启用连接验证机制
  • 设置连接最大空闲时间
  • 配置连接池监控

2.3 性能优化

性能优化建议:

  • 使用Tomcat JDBC连接池
  • 配置适当的连接池大小
  • 启用连接池预热
  • 使用连接池语句缓存
  • 监控连接池使用情况

学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 数据源配置

# 编辑server.xml文件,配置数据源
vi /Tomcat/app/conf/server.xml



type=”org.apache.catalina.UserDatabase”
description=”User database that can be updated and saved”
factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”
pathname=”conf/tomcat-users.xml” />


type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”com.mysql.cj.jdbc.Driver”
url=”jdbc:mysql://localhost:3306/fgedudb?useSSL=false&serverTimezone=UTC”
username=”fgedu”
password=”fgedu123″
maxTotal=”100″
maxIdle=”30″
minIdle=”10″
maxWaitMillis=”10000″
testOnBorrow=”true”
testWhileIdle=”true”
validationQuery=”SELECT 1″
timeBetweenEvictionRunsMillis=”30000″
minEvictableIdleTimeMillis=”60000″ />

3.2 连接池参数配置

连接池主要参数说明:

  • maxTotal:连接池最大连接数
  • maxIdle:连接池最大空闲连接数
  • minIdle:连接池最小空闲连接数
  • maxWaitMillis:获取连接的最大等待时间
  • testOnBorrow:从连接池获取连接时是否验证
  • testWhileIdle:空闲连接验证
  • validationQuery:验证连接的SQL语句
  • timeBetweenEvictionRunsMillis:空闲连接检查间隔
  • minEvictableIdleTimeMillis:连接最小空闲时间

3.3 应用集成

# 编辑应用的context.xml文件,引用数据源
vi /Tomcat/app/webapps/fgedu-webapp/META-INF/context.xml



from Tomcat视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 MySQL数据源配置实战

# 下载MySQL驱动
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
–2026-04-10 12:30:00– https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
Resolving dev.mysql.com (dev.mysql.com)… 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443… connected.
HTTP request sent, awaiting response… 302 Found
Location: https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz [following]
–2026-04-10 12:30:01– https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)… 23.213.161.175
Connecting to cdn.mysql.com (cdn.mysql.com)|23.213.161.175|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 24736432 (24M) [application/x-gzip]
Saving to: ‘mysql-connector-j-8.0.33.tar.gz’

mysql-connector-j-8.0.33.tar.gz 100%[====================================>] 23.60M 10.2MB/s in 2.3s

2026-04-10 12:30:04 (10.2 MB/s) – ‘mysql-connector-j-8.0.33.tar.gz’ saved [24736432/24736432]

# 解压并复制驱动到Tomcat lib目录
tar -zxvf mysql-connector-j-8.0.33.tar.gz
mysql-connector-j-8.0.33/
mysql-connector-j-8.0.33/LICENSE
mysql-connector-j-8.0.33/README.txt
mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar
mysql-connector-j-8.0.33/docs/

cp mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar /Tomcat/app/lib/

# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.2 PostgreSQL数据源配置实战

# 下载PostgreSQL驱动
wget https://jdbc.postgresql.org/download/postgresql-42.6.0.jar
–2026-04-10 12:40:00– https://jdbc.postgresql.org/download/postgresql-42.6.0.jar
Resolving jdbc.postgresql.org (jdbc.postgresql.org)… 174.142.242.243
Connecting to jdbc.postgresql.org (jdbc.postgresql.org)|174.142.242.243|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 1004862 (981K) [application/java-archive]
Saving to: ‘postgresql-42.6.0.jar’

postgresql-42.6.0.jar 100%[====================================>] 981.31K 1.1MB/s in 0.9s

2026-04-10 12:40:01 (1.1 MB/s) – ‘postgresql-42.6.0.jar’ saved [1004862/1004862]

# 复制驱动到Tomcat lib目录
cp postgresql-42.6.0.jar /Tomcat/app/lib/

# 编辑server.xml文件,配置PostgreSQL数据源
vi /Tomcat/app/conf/server.xml


type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”org.postgresql.Driver”
url=”jdbc:postgresql://localhost:5432/fgedudb”
username=”fgedu”
password=”fgedu123″
maxTotal=”100″
maxIdle=”30″
minIdle=”10″
maxWaitMillis=”10000″
testOnBorrow=”true”
testWhileIdle=”true”
validationQuery=”SELECT 1″
timeBetweenEvictionRunsMillis=”30000″
minEvictableIdleTimeMillis=”60000″ />

# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.3 Oracle数据源配置实战

# 下载Oracle驱动(需要从Oracle官网下载)
# 假设已下载ojdbc11.jar

# 复制驱动到Tomcat lib目录
cp ojdbc11.jar /Tomcat/app/lib/

# 编辑server.xml文件,配置Oracle数据源
vi /Tomcat/app/conf/server.xml


type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”oracle.jdbc.OracleDriver”
url=”jdbc:oracle:thin:@localhost:1521:ORCL”
username=”fgedu”
password=”fgedu123″
maxTotal=”100″
maxIdle=”30″
minIdle=”10″
maxWaitMillis=”10000″
testOnBorrow=”true”
testWhileIdle=”true”
validationQuery=”SELECT 1 FROM DUAL”
timeBetweenEvictionRunsMillis=”30000″
minEvictableIdleTimeMillis=”60000″ />

# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.4 连接池监控实战

# 创建连接池监控Servlet
vi /Tomcat/app/webapps/fgedu-webapp/WEB-INF/classes/com/fgedu/servlet/ConnectionPoolMonitorServlet.java
package com.fgedu.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(“/pool-monitor”)
public class ConnectionPoolMonitorServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(““);
out.println(“

连接池监控

“);

try {
// 初始化JNDI上下文
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup(“java:comp/env”);

// 获取数据源
DataSource ds = (DataSource) envCtx.lookup(“jdbc/fgedudb”);

// 获取连接池属性
PoolProperties props = ds.getPoolProperties();

// 输出连接池信息
out.println(“

连接池配置

“);
out.println(“

最大连接数: ” + props.getMaxTotal() + “

“);
out.println(“

最大空闲连接数: ” + props.getMaxIdle() + “

“);
out.println(“

最小空闲连接数: ” + props.getMinIdle() + “

“);
out.println(“

最大等待时间: ” + props.getMaxWaitMillis() + “ms

“);

// 输出连接池状态
out.println(“

连接池状态

“);
out.println(“

活动连接数: ” + ds.getActive() + “

“);
out.println(“

空闲连接数: ” + ds.getIdle() + “

“);
out.println(“

等待连接数: ” + ds.getWaitCount() + “

“);
out.println(“

连接池大小: ” + (ds.getActive() + ds.getIdle()) + “

“);

} catch (Exception e) {
out.println(“

错误: ” + e.getMessage() + “

“);
e.printStackTrace();
}

out.println(“”);
}
}

# 访问连接池监控
curl http://localhost:8080/fgedu-webapp/pool-monitor

连接池监控


连接池配置


最大连接数: 100


最大空闲连接数: 30


最小空闲连接数: 10


最大等待时间: 10000ms


连接池状态


活动连接数: 0


空闲连接数: 10


等待连接数: 0


连接池大小: 10


4.5 常见问题与解决方案

  • 连接池耗尽:检查连接是否正确关闭,增加连接池大小
  • 连接超时:检查数据库服务状态,调整连接超时时间
  • 连接验证失败:检查validationQuery配置,确保数据库服务正常
  • 内存泄漏:确保在使用完连接后正确关闭
  • 性能问题:调整连接池参数,优化SQL语句

学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

5.1 最佳实践

  • 使用Tomcat JDBC连接池
  • 根据应用负载设置适当的连接池大小
  • 启用连接验证机制
  • 配置连接池监控
  • 定期检查连接池状态

5.2 性能优化

性能优化建议:

  • 配置适当的连接池大小
  • 启用连接池预热
  • 使用连接池语句缓存
  • 优化SQL语句
  • 使用批处理减少数据库操作次数

5.3 自动化管理

自动化管理脚本示例:

# 自动化管理脚本
vi pool.sh
#!/bin/bash
# pool.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
TOMCAT_HOME=”/Tomcat/app”
APP_URL=”http://localhost:8080/fgedu-webapp/pool-monitor”

# 查看连接池状态
check_pool() {
echo “连接池状态:”
curl -s “$APP_URL” | grep -E “(活动连接数|空闲连接数|等待连接数|连接池大小)”
}

# 重启Tomcat服务
restart_tomcat() {
echo “重启Tomcat服务…”
$TOMCAT_HOME/bin/shutdown.sh
sleep 5
$TOMCAT_HOME/bin/startup.sh
echo “Tomcat服务重启成功”
}

# 主函数
case “$1” in
check)
check_pool
;;
restart)
restart_tomcat
;;
*)
echo “Usage: $0 {check|restart}”
;;
esac

5.4 故障排查

  • 查看Tomcat日志文件
  • 检查数据库连接配置
  • 验证数据库服务状态
  • 测试连接池监控
  • 检查应用代码中的连接使用情况
  • 分析SQL语句性能

风哥提示:在生产环境中,建议使用Tomcat JDBC连接池,并根据应用负载调整连接池参数。同时,要定期监控连接池状态,确保连接池的正常运行。

总结

本文详细介绍了Tomcat JDBC DataSource的配置与数据库连接池实战,包括MySQL、PostgreSQL和Oracle数据源的配置和使用。通过本文的学习,您应该掌握了Tomcat JDBC DataSource的配置和优化技巧。

Tomcat JDBC DataSource是Tomcat提供的一个高性能数据库连接池实现,可以帮助您高效管理数据库连接。在实际应用中,建议根据业务需求配置适当的连接池参数,并定期监控连接池状态。

更多学习教程公众号风哥教程itpux_com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息