数据库配置范例
一 MySQL 配置范例
数据库配置(文件dbcp.properties)如下
########DBCP##########
driverClassName=com.mysql.cj.jdbc.Driver
#url
url=jdbc:mysql://ip:3306/iidp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username=username
password=password
initialSize=5
maxActive=500
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20
keepAlive=true
二 Oracle 配置范例
数据库配置(文件dbcp.properties)如下
########Oracle########
driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@ip:1521:SMOMDB
username=root
password=123456
validationQuery=SELECT 'x' FROM DUAL
initialSize=5
maxActive=30
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=select 1 from dual
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20
三 PostgreSQL 配置范例
- DBCP 配置
########postgresql########
driverClassName=org.postgresql.Driver
url=jdbc:postgresql://xxx.xxx.120:5432/postgres?currentSchema=public&encoding=UTF-8&timezone=UTC
username=postgres
password=******
initialSize=5
maxActive=500
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=select 1
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20
keepAlive=true
四 OceanBase 配置范例
1. JDBC 连接配置调整
JDBC 连接示例:
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:oceanbase://xxx.xxx.xxx.xxx:3306/test?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&useUnicode=TRUE&characterEncoding=utf-8&socketTimeout=10000&connectTimeout=30000
username=root
password=******
initialSize=5
maxActive=500
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=select 1
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20
keepAlive=true
-
allowMultiQueries:默认为
FALSE,必须设置为TRUE,以允许使用分号连接的多语句文本格式。对使用文本协议的场景,只需开启此配置即可实现批量优化。 -
rewriteBatchedStatements:默认为
FALSE,若使用 PS 协议,则必须设置为TRUE,以在执行executeBatch()时将多条语句改写为分号连接的多语句格式。
特例说明:开启 rewriteBatchedStatements 后,对于多条 multi queries 插入语句(无论使用文本协议或 PS 协议),JDBC 驱动会将其改写为一条 Multi Values Insert 语句。
相关参数说明:
-
rewriteBatchedStatements:建议设置为TRUE,以提高批量插入的性能。 -
allowMultiQueries:建议设置为TRUE,允许使用分号连接的多语句文本格式。 -
useLocalSessionState:建议设置为TRUE,避免频繁向 OB 数据库发送 session 变量查询 SQL。 -
socketTimeout:执行 SQL 时,socket 等待 SQL 返回的时间。 -
connectTimeout:建立连接时,等待连接的时间。 -
useCursorFetch:建议设置为TRUE,适用于大数据量查询。 -
useServerPrepStms:控制是否使用 PS 协议发送 SQL。 -
cachePrepStmts:控制是否开启 PS cache,避免重复执行 prepare。 -
prepStmtCacheSQLLimit:可放入 PS cache 的 SQL 长度限制。 -
prepStmtCacheSize:PS cache 可保存的 SQL 数量。 -
maxBatchTotalParamsNum:针对 batch 操作,一条 SQL 最多支持的参数个数。
2. 本地 JDBC连接 OceanBase
dbcp.properties添加oceanbase配置
########OceanBase########
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://xxx.xxx.xxx.xxx:2881/snest?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&useUnicode=TRUE&characterEncoding=utf-8&socketTimeout=10000&connectTimeout=30000&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
username=root
password=******
validationQuery=SELECT 1
五 GaussDB 配置范例
JDBC配置:
1. dbcp.properties 示例:
########DBCP##########
initialSize=5
maxActive=500
minIdle=5
filters=stat
maxWait=6000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=1800000
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties:druid.stat.sql.MaxSize=100;
keepAlive=true
########gaussdb########
driverClassName=com.huawei.gaussdb.jdbc.Driver
url=jdbc:gaussdb://127.0.0.1:8000,127.0.0.1:8000,127.0.0.1:8000/tpcc?currentSchema=snest_jichen&autoBalance=true&refreshCNIpListTime=3&prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
username=******
password=******
validationQuery=SELECT 1
gaussdbDeployment=Distributed
2. spring配置文件添加参数适配高斯自定义SQL列字段别名转换
正常不需要添加这个配置,除非项目特殊需要.
application-dev.properties添加:
orm.sql.wrap_camelcase_alias=true
六 Vastbase(海量数据库) 配置范例
Vastbase 海量数据库基本上兼容Postgres SQL,所以SQL语法和Postgres一样,可以直接把Vastbase作为Postgres使用.
JDBC配置:
1 默认兼容模型
########DBCP##########
initialSize=5
maxActive=500
minIdle=5
filters=stat
maxWait=6000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=1800000
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
validationQuery=SELECT 1
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties:druid.stat.sql.MaxSize=100;
keepAlive=true
########vastbase##########
driverClassName=cn.com.vastbase.Driver
url=jdbc:vastbase://ip:25432/snest?currentSchema=snest_changwen
username=root
password=******
2 MySQL兼容模型
vastbase数据库访问
数据库:snest_tpcc 端口:25434 用户名:snest_changwen
########DBCP##########
driverClassName=cn.com.vastbase.Driver
url=jdbc:vastbase://ip:25434/snest_tpcc?currentSchema=snest_changwen&db_compatibility=mysql
username=root
password=******
dbCompatibility=mysql
keepAlive=true
七 Dameng(国产达梦数据库) 配置范例
配置数据库连接信息 在 dbcp.properties 配置连接信息如下:
########DBCP##########
initialSize=5
maxActive=500
minIdle=5
filters=stat
maxWait=6000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=1800000
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
validationQuery=select 1 from dual
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties:druid.stat.sql.MaxSize=100;
keepAlive=true
########dameng##########
driverClassName=dm.jdbc.driver.DmDriver
url=jdbc:dm://ip:30236/IIDP_DEMO
username=SYSDBA
password=SYSDBA001
八 数据库连接池配置参数详解表
📊 通用连接池配置参数(适用于所有数据库)
| 参数名 | 默认值 | 推荐值 | 说明 | 影响 |
|---|---|---|---|---|
| driverClassName | - | 按数据库定 | JDBC驱动类全名 | 必须正确,否则无法连接 |
| url | - | 按数据库定 | 数据库连接URL | 连接地址、端口、数据库名 |
| username | - | - | 数据库用户名 | 认证信息 |
| password | - | - | 数据库密码 | 认证信息 |
| initialSize | 0 | 5-10 | 初始连接数 | 启动速度、初始性能 |
| maxActive | 8 | 30-2000 | 最大活动连接数 | 最大并发处理能力 |
| maxIdle | 8 | 同maxActive | 最大空闲连接数 | 资源占用 |
| minIdle | 0 | 5-10 | 最小空闲连接数 | 保持"热"连接数量 |
| maxWait | 无限 | 3000-10000ms | 获取连接最大等待时间 | 请求响应时间、超时控制 |
| validationQuery | - | SELECT 1等 | 连接验证SQL | 连接有效性检查 |
| testOnBorrow | true | false | 获取连接时验证 | 性能vs可靠性 |
| testOnReturn | false | false | 归还连接时验证 | 性能开销 |
| testWhileIdle | false | true | 空闲时验证 | 连接健康检查 |
| timeBetweenEvictionRunsMillis | -1 | 60000ms | 回收线程运行间隔 | 连接回收频率 |
| minEvictableIdleTimeMillis | 30min | 300000ms | 连接最小空闲时间 | 连接存活时间 |
| numTestsPerEvictionRun | 3 | 3 | 每次检查连接数 | 回收效率 |
| poolPreparedStatements | false | true | 缓存PreparedStatement | SQL执行性能 |
| maxOpenPreparedStatements | -1 | 20-100 | 最大缓存PS数 | 内存占用 |
| removeAbandoned | false | true | 移除泄露连接 | 防连接泄露 |
| removeAbandonedTimeout | 300 | 180s | 泄露连接超时时间 | 连接泄露检测灵敏度 |
| logAbandoned | false | true | 记录泄露日志 | 问题排查 |
| connectionProperties | - | 各种优化参数 | 连接属性设置 | 性能优化 |
🔧 数据库特有配置
1. 连接验证SQL(validationQuery)
| 数据库 | 推荐验证SQL | 说明 |
|---|---|---|
| MySQL | SELECT 1 |
最简单高效 |
| Oracle |
SELECT 'x' FROM DUAL 或 SELECT 1 FROM DUAL
|
必须FROM DUAL |
| PostgreSQL | SELECT 1 |
|
| SQL Server | SELECT 1 |
|
| DB2 | SELECT 1 FROM SYSIBM.SYSDUMMY1 |
|
| 达梦 | SELECT 1 FROM DUAL |
类似Oracle |
| GaussDB | SELECT 1 |
|
| OceanBase | SELECT 1 |
兼容MySQL |
| Vastbase | SELECT 1 |
兼容PostgreSQL |
2. JDBC驱动类(driverClassName)
| 数据库 | 驱动类 | 备注 |
|---|---|---|
| MySQL | com.mysql.cj.jdbc.Driver |
8.0+用cj |
| Oracle | oracle.jdbc.OracleDriver |
|
| PostgreSQL | org.postgresql.Driver |
|
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
|
| DB2 | com.ibm.db2.jcc.DB2Driver |
|
| 达梦 | dm.jdbc.driver.DmDriver |
|
| GaussDB | com.huawei.gaussdb.jdbc.Driver |
|
| OceanBase |
com.mysql.cj.jdbc.Driver 或 com.oceanbase.jdbc.Driver
|
|
| Vastbase |
cn.com.vastbase.Driver 或 org.postgresql.Driver
|
3. URL格式示例
| 数据库 | URL格式示例 |
|---|---|
| MySQL | jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=UTF-8 |
| Oracle | jdbc:oracle:thin:@//host:1521/service_name |
| PostgreSQL | jdbc:postgresql://host:5432/db?currentSchema=schema |
| SQL Server | jdbc:sqlserver://host:1433;databaseName=db |
| 达梦 | jdbc:dm://host:5236/database |
| GaussDB | jdbc:gaussdb://host:8000/db |
| OceanBase | jdbc:oceanbase://host:2881/db |
⚡ 性能调优推荐配置
应用类型配置建议
| 应用类型 | initialSize | maxActive | minIdle | 说明 |
|---|---|---|---|---|
| 小型应用 | 5 | 20 | 5 | 低并发,简单业务 |
| Web应用 | 10 | 50-1000 | 10 | 中等并发 |
| 高并发应用 | 20 | 200-2000 | 20 | 电商、交易系统 |
| 批处理应用 | 根据批次大小 | 200-2000 | 根据需求 | 大数据处理 |
| 微服务 | 5 | 50-1000 | 5 | 多实例部署 |
关键参数调优表
| 参数 | 调优目标 | 调优方法 | 监控指标 |
|---|---|---|---|
| maxActive | 平衡并发与资源 | 监控连接使用率,设峰值的120% | ActiveCount峰值 |
| maxWait | 减少超时 | 根据业务容忍时间设置 | 获取连接超时次数 |
| minEvictableIdleTimeMillis | 减少创建开销 | 设为平均空闲时间的1.5倍 | 连接创建频率 |
| timeBetweenEvictionRunsMillis | 及时回收 | 设为连接平均空闲时间的1/3 | 空闲连接数 |
| testWhileIdle | 保证健康 | 必须开启,配合validationQuery | 连接失效次数 |
🚨 环境监控参数
# 1. 连接泄露检测(建议)
removeAbandoned=true
removeAbandonedTimeout=180
logAbandoned=true
# 2. 连接健康检查(建议)
testWhileIdle=true
validationQuery=SELECT 1
timeBetweenEvictionRunsMillis=30000
# 3. 超时控制(建议)
maxWait=10000
connectionTimeout=30000
socketTimeout=60000
# 4. 监控统计(建议)
filters=stat,wall
connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
📈 配置验证检查表
| 检查项 | 标准 | 说明 |
|---|---|---|
| 连接泄漏 | removeAbandoned=true | 防止连接未关闭 |
| 连接验证 | testWhileIdle=true | 定期检查连接健康 |
| 超时设置 | maxWait < 10000ms | 避免长时间等待 |
| 验证SQL | 数据库对应正确SQL | 确保验证有效 |
| 连接数合理 | maxActive ≤ 数据库max_connections | 不超过数据库限制 |
| 空闲连接 | minIdle ≥ 初始并发需求 | 保证基本性能 |
这个表格可以作为所有数据库连接池配置的通用参考指南。