最近自己写一个spring cloud的练手项目,但是遇到了一个奇怪的问题,就是我每创建一个module,启动时候必定报错url的问题,然后导致启动失败。失败截图如下
但是我好奇的是,我写的测试restTemplate模块实现不同模块之间的调用,以及Eureka服务中心模块,他们都是独立的程序,按道理是不用配置spring datasource url的。也没有涉及到太多的模块依赖。
除非我在配置文件上加上spring DataSource的url ,这样模块才能正常启动
我想问问大家这个是正常的吗?我感觉不用每个都配置这个吧,不然一个项目假如有1000个模块 岂不是要配置1000次,有没有大佬帮我判断一下到底是哪里出问题了?
(十分感谢)
你看看你的maven依赖,是不是直接,或者间接的引入了什么 需要数据源 的组件昂。
WHZZH
3
贴一下代码结构分层,按道理,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
这玩意儿要呐。
那我先给去掉试试。 这个pom是粘过来的,目前是不要和数据库相关的东西
哎呀,好了,谢谢大佬,原来是这个依赖的问题。 感谢感谢
总结:springboot项目模块依赖,如果是从其他地方粘贴过来的pom,启动报数据源的问题,同时模块也不需要数据源,可以把mybatis依赖包,mysql依赖包,jdbc依赖包统统注释掉,这样就解决了模块不需要datasource而配置文件不配datasource报错的问题。
尤其是mybatis,其他两个可去可不去,但是mybatis-spring-boot-starter一定会扫数据源。
1 个赞