必须写在jdbc url里的参数包括servertimezone、characterencoding、useunicode、usessl、allowpublickeyretrieval(mysql)或sslmode、timezone、client_encoding(postgresql);连接池参数如maximumpoolsize、connectiontimeout等必须通过连接池配置对象或配置文件单独设置,url中无效。

Java JDBC 连接字符串(URL)是建立数据库连接的起点,参数配置直接影响中文显示、时间一致性、SSL 安全性及连接稳定性。关键在于分清哪些参数必须写在 URL 里,哪些必须交给连接池单独管理——混用会导致失效或报错。
必须写在 JDBC URL 里的核心参数
这些参数作用于**单次物理连接建立过程**,驱动在初始化连接时直接读取:
-
时区设置(MySQL 必须):用
serverTimezone=Asia/Shanghai,避免GMT%2B8;PostgreSQL 对应参数是timezone=Asia/Shanghai -
字符编码(MySQL 必须):同时加
useUnicode=true&characterEncoding=utf8mb4;PostgreSQL 默认 UTF-8,但建议显式加client_encoding=utf8 -
SSL 与密钥兼容(常见报错源头):MySQL 加
useSSL=false(开发)或useSSL=true&requireSSL=true&allowPublicKeyRetrieval=true(生产);PostgreSQL 用sslmode=require -
基础连接信息不能漏:主机、端口、数据库名、用户密码(可写在 URL 中,也可分离传入
getConnection())
不能写在 JDBC URL 里的参数
连接池(如 HikariCP、Druid)的运行时行为参数,**URL 里写了也无效**,必须通过连接池配置对象或配置文件设置:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 最大连接数(
maximumPoolSize)、最小空闲数(minimumIdle) - 连接超时(
connectionTimeout)、空闲超时(idleTimeout)、连接最大存活时间(maxLifetime) - 自动提交开关(
autoCommit)——HikariCP 默认为true,MySQL 驱动 URL 中的autoCommit不起作用 - 预编译语句缓存(
cachePrepStmts=true)等性能参数,属于连接池级优化,非 URL 层面
不同数据库的 URL 写法差异
结构相似,但参数名和默认行为不同,不能套用 MySQL 的写法连 PostgreSQL:
-
MySQL 8.0+:
jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai&characterEncoding=utf8mb4&useUnicode=true&allowPublicKeyRetrieval=true&useSSL=false,驱动类名必须为com.mysql.cj.jdbc.Driver -
PostgreSQL:
jdbc:postgresql://localhost:5432/mydb?user=postgres&password=123&sslmode=require&timezone=Asia/Shanghai&client_encoding=utf8,不支持characterEncoding,也不需要useUnicode -
注意端口与协议前缀:MySQL 是
jdbc:mysql://,PostgreSQL 是jdbc:postgresql://,写错会 ClassNotFound 或 No suitable driver
Spring Boot 中推荐的配置方式
把 URL 和连接池参数分开管理,清晰且可维护:
- 在
application.yml中只放带时区/编码的 URL,用户名密码走独立字段:
datasource:
url: jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai&characterEncoding=utf8mb4&useUnicode=true
username: root
password: 123
hikari:
maximum-pool-size: 20
connection-timeout: 30000
- 这样既保证 URL 干净有效,又让连接池行为受 Spring 全局管控,避免硬编码
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










