Spring Boot启动报错:Failed to configure a DataSource: ‘url‘ attribute is not 本质问题解析

Spring Boot启动报错:Failed to configure a DataSource: ‘url‘ attribute is not 本质问题解析,第1张

Spring Boot启动报错:Failed to configure a DataSource: ‘url‘ attribute is not 本质问题解析

Spring Boot启动报错:Failed to configure a DataSource: ‘url’ attribute is not 本质问题解析

**************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

问题描述: 配置数据源失败,没有找到url等数据库配置信息

关于这个报错,网上已经说了很多,此处不再赘述,究其根本原因,在此阐述下:
普遍有以下几种解决方式:
1.在没有使用到数据库的前提下,可以注释掉数据库相关依赖,比如,mybatis-spring-boot-starter、spring-boot-starter-jdbc等;
这样做的本质是因为
(1)这些依赖中有配置类DataSourceAutoConfiguration加载的条件依赖类 EmbeddedDatabaseType.class ,查看DataSourceAutoConfiguration源码可知,@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }),当项目中存在DataSource和EmbeddedDatabaseType时,DataSourceAutoConfiguration配置类会被加载,而加载时需要 url、driver class、root、password信息,此时配置文件中又没有配置,所以报错。DataSource是JDK自带的,这个移除不了,EmbeddedDatabaseType是spring-jdbc包下的,移除掉包含spring-jdbc的依赖就可以了。基于这个原因,在pom文件中注释掉mybatis-spring-boot-starter、spring-boot-starter-jdbc等数据库依赖就可以解决问题

2.在没有使用到数据库的前提下,使用exclude移除掉配置数据源的配置类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
注意:有时不仅仅只有默认的DataSourceAutoConfiguration类,Spring Boot扫描的是根路径下所有的spring.factories文件
这种方式的本质是
不让数据库配置类加载,Spring Boot自动配置的流程
(1)扫描根路径下所有的spring.factories文件,并以key-value的方式封装到properties中
(2)只获取key为EnableAutoConfiguration的自动配置类
(3)去重
(4)移除掉不需要加载的类(使用exclude配置的需要移除的配置类)
(5)按条件实例化加载
这种方式就是在第四步的时候移除数据库相关的配置类,不让其加载,也就不需要数据库相关配置,就不会报错了

3.要是使用到了数据库,就直接在配置文件中配置上相关配置就可以了,这个没什么本质说的

出现这种问题,还是需要了解Spring Boot自动配置的原理,需要了解的,可以翻看我之前写的博客。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5682397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存