删除某个服务的数据库依赖

背景

某个服务之前是基于数据库做存储,后来改成ES做存储,需要依赖数据库的依赖

第一步: 删除yaml的数据库配置依赖

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

第二步:修改springboot 配置类

@SpringBootApplication(exclude = {
		DataSourceAutoConfiguration.class
})

启动还是报错,这次报的是

Description:

Field elasticsearchTemplate in xxx required a bean named 'jdbcMappingContext' that could not be found.


Action:

Consider defining a bean named 'jdbcMappingContext' in your configuration.

根据马斯克第一义的原理,我们怀疑

问题分析

1. 错误原因

  • jdbcMappingContext 是 Spring Data JDBC 模块中的 Bean,用于管理实体类与数据库表的映射关系。
  • ElasticsearchTemplate 需要该 Bean,说明项目中存在以下问题之一:
    • 隐式依赖了 Spring Data JDBC:项目中可能间接引入了 spring-boot-starter-data-jdbc 依赖。
    • 自动配置误触发:Spring Data 的某些自动配置类(如 DataJdbcAutoConfiguration)被错误加载,但 DataSourceAutoConfiguration 已被排除,导致依赖缺失。

2. 根本原因

  • 依赖冲突spring-boot-starter-data-elasticsearch 或其他模块可能间接依赖了 spring-data-jdbc
  • 自动配置未完全排除DataSourceAutoConfiguration 排除后,未排除其他依赖 JDBC 的自动配置类(如 DataJdbcAutoConfiguration)。

解决方案

1. 排除 Spring Data JDBC 的自动配置

@SpringBootApplication 中显式排除 DataJdbcAutoConfiguration

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,
    DataJdbcAutoConfiguration.class  // 新增此行
})
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

2. 移除不必要的依赖

检查 pom.xmlbuild.gradle,移除 spring-boot-starter-data-jdbcspring-data-jdbc 依赖:

<!-- 删除以下依赖(如果存在) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

参考资料

SpringBoot的自动装配功能
https://www.cnblogs.com/ludangxin/p/15092237.html

SpringBoot数据库配置源码解析:自动配置内部实现解析
https://cloud.tencent.com/developer/article/2143957

posted @ 2025-03-18 11:27  向着朝阳  阅读(15)  评论(0)    收藏  举报