我用idea创建的一个项目,为什么每个moduel都必须加DataSource

最近自己写一个spring cloud的练手项目,但是遇到了一个奇怪的问题,就是我每创建一个module,启动时候必定报错url的问题,然后导致启动失败。失败截图如下


但是我好奇的是,我写的测试restTemplate模块实现不同模块之间的调用,以及Eureka服务中心模块,他们都是独立的程序,按道理是不用配置spring datasource url的。也没有涉及到太多的模块依赖。
除非我在配置文件上加上spring DataSource的url ,这样模块才能正常启动
我想问问大家这个是正常的吗?我感觉不用每个都配置这个吧,不然一个项目假如有1000个模块 岂不是要配置1000次,有没有大佬帮我判断一下到底是哪里出问题了?
(十分感谢)

你看看你的maven依赖,是不是直接,或者间接的引入了什么 需要数据源 的组件昂。

贴一下代码结构分层,按道理,dao层应该是抽出来让其他模块依赖的。controller->service->dao。

应该没有啊,我贴一下我的依赖吧

这是我的Eureka模块的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2021</artifactId>
        <groupId>com.atguigu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7001</artifactId>

    <dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

    </dependencies>
</project>

我把mysql的两个包给去掉了,然后报这个错

很显然,druid-spring-boot-starter 中包含了数据源的 @Confiugration 配置。spring扫描到它了,就会初始化数据源。

那是不是把这个包单独去掉就可以呢? 我现在单独去掉这个包后再启动依然会报这个错。说我缺少数据源。大佬可以看一下

肯定是你某个组件,使用了数据源,你看看依赖树。就能找到。

我看这个Eureka里,貌似是用不到数据源的吧。就简单的配个注册中心,现在其他什么都不需要,简单启动。 但是仍然需要这个,我就很不理解为什么

你不用了个 mybatis ??mybatis-starter 这玩意儿要呐。

那我先给去掉试试。 :laughing:这个pom是粘过来的,目前是不要和数据库相关的东西

哎呀,好了,谢谢大佬,原来是这个依赖的问题。 :laughing:感谢感谢

总结:springboot项目模块依赖,如果是从其他地方粘贴过来的pom,启动报数据源的问题,同时模块也不需要数据源,可以把mybatis依赖包,mysql依赖包,jdbc依赖包统统注释掉,这样就解决了模块不需要datasource而配置文件不配datasource报错的问题。
尤其是mybatis,其他两个可去可不去,但是mybatis-spring-boot-starter一定会扫数据源。

1 个赞