VS Code报错:‘url‘ attribute is not specified and no embedded datasource could be configured

tech2022-09-04  110

错误描述

在工作中负责的是一个系统的鉴权系统。项目本身有不少值得优化改进的地方,但是奈何它已经是交付阶段了,没有明显bug的情况下领导不允许再对它进行大量的更改。因此,工作之余想自己写一个能满足类似功能的工程。在开发的过程中遇到如下错误: Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. 错误的截图是这样的:

开发环境

开发环境用的是VS Code,操作系统中同时安装了Java 1.8、1.11和1.14版本,这个工程用的是1.8。

错误分析与解决

个人认为这是一个蛮低级的错误了。是因为自己少写了一段代码导致的。但是这个错误的本质值得多想一下。 报错说找不到url路径并且没有数据源,也就是在Spring Boot中集成MyBatis的时候,找不到数据库的配置信息。或者说,MyBatis没找到预期中的加载类,数据库的链接地址没有加载成功。从这方面考虑,有5种情况可能会导致这个错误。

DataSourceAutoConfiguration自动加载没有配置spring-datasource-url属性spring-datasource-url配置的地址格式有问题数据库相关的配置文件没有加载成功profiles文件夹名称冲突

解决方案一:禁用DataSourceAutoConfiguration

Spring Boot中的DataSourceAutoConfiguration的作用是自动配置数据库。这个类的自动加载可能会导致工程中数据库相关的配置是错误的。因此禁用这个类可以解决这个问题。Spring Boot工程是通过SpringBootApplication注解启动的,在这个注解中用exclude将其排除掉即可。

import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

解决方案二:配置spring-datasource-url

Spring Boot工程的数据库配置应该写在application.properties中或者application.yml中。

# application.properties中数据库的配置 spring.datasource.url=jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.username=database_user_name spring.datasource.password=database_password # application.yml文件中添加如下配置: spring: datasource: url: jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8 driverClassName: com.mysql.jdbc.Driver username: database_user_name password: database_password

解决方案三:数据库配置中的url地址有误

数据库配置中的url地址有误也会造成这种报错。不同的数据库的路径写法不同。如果是MyBatis数据库则配置应该为:jdbc:mysql://数据库地址/数据库名称。如果是SqlServer则为:jdbc:sqlserver://数据库地址/数据库名称。以此类推。

解决方案四:数据库相关配置文件没有加载成功

如果仅仅在application.properties或者application.yml中写了数据库的配置,而忘记在pom文件中配置这些配置文件的路径,那就跟没有配置一样。偶尔粗心会犯这种错误。

<resources> <resource> <directory>src/main/resource</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources>

根据项目的实际结构在pom文件中配置各个文件的路径。这样项目才能扫描到数据库的配置。

解决方案五:profile文件夹名称冲突

如果配置文件所在的文件夹的名称跟其他扫描到的文件夹冲突了,也会导致项目读不到正确的数据库配置。如果发生这种情况,将配置文件所在的文件夹及pom文件中的配置路径改个名字就好了。

最新回复(0)