自己搭了一个项目,启动过程中各种错误,其中这个错误浪费了好长时间,特此记录一下这个问题,详细报错如下:
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).
这个问题折腾了一早上,终于解决了。执行了clean,install以后都不报错,重新启动项目就会报上面的错误。按照报错信息百度了好多方法,走了很多弯路还是都没有解决。最终想起来之前的项目报错的一个信息,感觉可能会从那里入手,最终成功解决。分享一下我的解决过程:
1:首先检查yml或者properties中的配置,
2:在启动类中加上@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)。不过这个貌似起不到什么作用,大家试一下还是不行就不要再这里浪费时间了。具体原因可以看下面第二种解决方式。
3:结束java进程,重新启动
4:从pom文件入手。
第一种:首先我的yml文件中数据库配置是对着的,我使用的是mybatisplus,mysql版本是8.0.31
yml中数据库配置:
注意datasource的目录级别是spring下面一级
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ip+端口+库名?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username:
password:
数据库版本:
pom依赖:
<!--数据库链接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--jdbc依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!--mybatis-plus代码生成相关依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
以上就是项目中的数据库相关的依赖和yml中数据库的配置,确定yml中的配置没有语法错误或者参数错误,pom文件也没有错以后。
接着我尝试第二种解决方法:项目启动的时候,没有找到dataSource相关的配置信息,所以当spring创建dataSource bean时因为缺少dataSource相关的配置信息就会报错。所以我在启动类上加上这一行代码
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
该注解的作用是,排除自动注入数据源的配置(取消数据库配置),在springBoot中使用多数据源时,加上@SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})。
DataSourceAutoConfiguration.class会自动去application.yml或者properties文件里找spring.datasource相关的信息并自动配置单数据源
DataSourceAutoConfiguration.class默认会帮我们自动配置单数据源,所以,如果想在项目中使用多数据源就需要排除它,手动指定多数据源。
但是我这里就一个数据源,并且加上以后重新启动项目,发现还是报错。个人觉得可能当项目中存在多个数据源的时候,可以尝试在启动类的注解上加上这一段代码,试一下。
接着第三种:结束java进程,我试了 还是不行。
最后第四种:执行了claen,install以后,我发现在生成的 target 文件中没有找到在resources 中编写的的配置文件 application.yml
于是我在pom文件中添加一下配置:
<bulid>
<resources>
<resource>
<directory>src/main/resources</directory><!--yml所在目录-->
<includes>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</bulid>
这里的作用是在build项目时,关闭对某些资源的过滤,从而防止资源导出失败。其中关闭了对yml文件的过滤,如果还需要保留其他的文件可以通过include进行添加。添加完以后需要再次刷新一下maven,不然可能不会生效。
然后再重新clean,install以后,打开target
然后从新启动项目,就可以了~
这就是我解决这个错误的所有方式和过程,最终成功启动项目。以上描述有误的地方欢迎大家指正,也希望大家能评论出自己解决这个错误的方法让更多的小伙伴受益,免走弯路。有问题可加v 876942434, 大家一起进步~