文章目录
- 一,错误表现
- 二,错误原因
- 三,解决方案
- 1,排除无关依赖
- 2,调整依赖关系
一,错误表现
在启动Spring Cloud Gateway服务时,控制台输出了一系列错误信息,指出应用程序未能成功启动。
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
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
错误信息的关键点在于DataSource配置失败,具体来说是未能指定数据库连接的URL,同时系统也未能自动配置任何嵌入式的数据源。
这导致了在尝试初始化数据源时找不到合适的驱动类,从而触发了应用程序启动失败。
二,错误原因
错误的根本原因在于Spring Cloud Gateway模块的依赖结构。
在项目构建中,Gateway模块依赖于common
的共享模块,该模块包含了MyBatis框架的依赖。
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
MyBatis在初始化阶段会尝试加载数据库相关的配置,以便于后续的数据库操作。
然而,对于Gateway这样的无状态服务,它并不需要与数据库交互,因此并没有提供数据库连接所需的配置信息。
当MyBatis尝试读取这些缺失的配置时,就会引发上述的错误。
三,解决方案
为了避免Spring Cloud Gateway在启动时加载数据库配置,可以采取以下步骤:
1,排除无关依赖
在Gateway模块的主配置类(通常是启动类)上,使用@SpringBootApplication
注解的exclude
属性来排除不需要的自动配置类。在这种情况下,可以排除DataSourceAutoConfiguration
类,这是Spring Boot用来自动配置数据源的类。
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
2,调整依赖关系
也可以在pom文件引用common模块的声明中,排除对mybatis相关包的引入。
<!-- 引入common模块,但排除MyBatis -->
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>1.0.0</version>
<exclusions>
<!-- 排除MyBatis核心库 -->
<exclusion>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
</exclusion>
</exclusions>
</dependency>