Spring Boot报错DataSourceBeanCreationException:无法确定合适驱动类
异常信息
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
配置文件内容
spring.datasource.url=jdbc:sqlserver://PADBQUA01 spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.datasource.username=userName spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.SQLServerDialect spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect spring.jpa.defer-datasource-initialization=true
POM依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.7.5</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.6.0.Final</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.7.6</version> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc42</artifactId> <version>6.0.8112</version> </dependency> </dependencies>
原因分析及解决步骤
1. 数据库URL不完整
SQL Server的JDBC URL需要明确指定端口和数据库名称,当前URL缺少这两个关键信息,导致驱动无法识别连接规则。修改URL为:
spring.datasource.url=jdbc:sqlserver://PADBQUA01:1433;databaseName=你的数据库名称
(默认端口为1433,若你的实例使用自定义端口,替换为实际端口即可)
2. 依赖版本冲突或冗余
- Spring Boot Starter版本不一致:
spring-boot-starter-test用了2.7.5,spring-boot-starter-data-jpa用了2.7.6,统一版本号避免冲突,建议都使用2.7.6。 - 手动引入的
hibernate-core和spring-boot-starter-data-jpa自带的Hibernate版本存在冲突,Spring Boot 2.7.x默认集成Hibernate 5.6.15.Final,删除手动指定的hibernate-core依赖,让starter自动管理版本即可。
修改后的POM依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.7.6</version> <scope>test</scope> <!-- 测试依赖添加test scope,避免打包到生产环境 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.7.6</version> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc42</artifactId> <version>6.0.8112</version> </dependency> </dependencies>
3. 驱动兼容性问题
sqljdbc42仅支持JDK 8,若你使用更高版本JDK,建议替换为微软官方推荐的新版驱动mssql-jdbc,同时可以省略driverClassName配置,新版驱动会通过URL自动识别驱动类:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>11.2.3.jre8</version> <!-- 根据你的JDK版本选择对应版本 --> </dependency>
4. 验证依赖是否正确引入
执行mvn dependency:tree命令,检查SQL Server驱动是否出现在依赖树中。如果没有,清理本地Maven仓库后重新执行mvn clean install下载依赖。
内容的提问来源于stack exchange,提问作者מרים בלוך

