Spring MVC或Spring Boot连接数据库时如何查看驱动类型及连接各类驱动
Spring 项目JDBC驱动常见问题解答
1. 如何查询当前使用的JDBC驱动类型?
有两种常用方式:
- 代码查询:注入数据源后通过连接元数据获取
import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class DriverInfoUtil { @Autowired private DataSource dataSource; public void printCurrentDriver() throws Exception { try (Connection conn = dataSource.getConnection()) { DatabaseMetaData metaData = conn.getMetaData(); String driverName = metaData.getDriverName(); String driverVersion = metaData.getDriverVersion(); System.out.println("驱动名称:" + driverName); System.out.println("驱动版本:" + driverVersion); // 快速判断驱动类型 if (driverName.contains("ODBC")) { System.out.println("驱动类型:Type 1(JDBC-ODBC桥接驱动)"); } else if (driverName.contains("OCI") || driverName.contains("Native")) { System.out.println("驱动类型:Type 2(本地API驱动)"); } else if (driverName.contains("MyCat") || driverName.contains("ShardingSphere") || driverName.contains其他中间件标识) { System.out.println("驱动类型:Type 3(网络协议中间件驱动)"); } else { System.out.println("驱动类型:Type 4(原生数据库协议瘦驱动)"); } } } }
- 日志查询:把项目日志级别调整为
DEBUG,启动后搜索关键词Driver,就能看到Spring加载的驱动全类名和相关信息。
2. 如何分别配置Type 1、Type 2、Type 3驱动?
注意:Type 1和Type 2驱动目前已经基本淘汰,仅特殊兼容场景会用到,Type 3也只有中间件代理场景才会使用,常规开发优先用Type 4驱动。
- Type 1驱动(JDBC-ODBC桥接驱动)
依赖本地系统提前配置好的ODBC数据源,JDK 1.8及之后版本已经默认移除了JDBC-ODBC桥,需要额外引入兼容包才能使用,配置示例:
spring.datasource.driver-class-name=sun.jdbc.odbc.JdbcOdbcDriver spring.datasource.url=jdbc:odbc:你本地配置的ODBC数据源名称 spring.datasource.username=数据库用户名 spring.datasource.password=数据库密码
- Type 2驱动(本地API驱动)
依赖本地安装的数据库客户端原生库,典型代表是Oracle的OCI驱动,配置示例:
# Oracle OCI Type2驱动配置 spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url=jdbc:oracle:oci:@你本地配置的TNS服务名 spring.datasource.username=数据库用户名 spring.datasource.password=数据库密码
使用前需要提前在本地安装Oracle客户端,配置好TNS环境变量。
- Type 3驱动(网络协议中间件驱动)
需要搭配独立的数据库代理中间件使用,驱动仅负责和中间件通信,中间件再转发请求到实际数据库,不同中间件的配置参数不同,通用示例:
spring.datasource.driver-class-name=对应中间件的JDBC驱动全类名 spring.datasource.url=jdbc:中间件协议://中间件IP:端口/目标数据库标识 spring.datasource.username=中间件认证用户名 spring.datasource.password=中间件认证密码
使用前需要提前引入中间件对应的JDBC驱动依赖。
3. 通过application.properties配置启动项目时,是否默认加载使用Type 4驱动?
默认场景下是的,原因如下:
- Spring Boot自动装配逻辑会优先匹配你引入的官方数据库原生JDBC依赖,比如MySQL的
mysql-connector-java、Oracle的ojdbc8等,这些官方驱动都是Type 4瘦驱动,不需要依赖本地任何组件,直接通过TCP协议和数据库通信。 - 只有你主动在配置里指定了Type 1/2/3的
driver-class-name和对应的URL格式,Spring才会加载非Type 4的驱动。 - 如果你没有引入任何JDBC驱动依赖,Spring Boot启动会直接报数据源相关错误,不会默认加载任何驱动。
内容的提问来源于stack exchange,提问作者Chãrming ßoy
相关产品推荐
相关产品推荐

