使用springcloud启动服务时报错 Reason: Unable to set value for property driver-class-name

目录

问题展示

问题剖析

解决方案


问题展示

首先,此问题出现在springcloud某一个微服务启动时, 弹出的错误如下

很明显可以看出springboot启动时加载不到我们给他配置的数据源,我第一个反应是yml文件配置写错了。下面是这个微服务的yml文件,我今天反复看了好多次也没发现问题

server:
  port: 8081
spring:
  application:
    name: item-service
  datasource:
    url: jdbc:mysql:///leyou
    username: root
    password: root
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
  instance:
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 15
mybatis:
  type-aliases-package: com.leyou.item.pojo

事实上,我的yml文件并没有问题 

问题剖析

原因是启动微服务时,application应用会调用@SpringBootApplication这个注解,这个注解做的其中一件事是自动加载数据源,首先确保yml文件没有写错。以下两种情况时,最可能引起这个错误

  • 你的yml文件里有多个数据源,springboot不知道该调用哪个,所以找不到
  • 逐层调用数据库时某一层的jar包版本和其他层的maven版本不兼容

很明显我的问题是第二种情况。这里对版本兼容提供一个简单的思路,mysql数据库在本地,项目启动首先要有jdbc的jar包,mysql驱动的jar包,以及对应的以下mabatis,mapper,druid的各种jar包版本。

上图中的版本都没有错误,但是有一个版本我写的和mysql的其他版本不兼容,导致springboot找不到数据源。你想到了还剩哪个版本吗?

解决方案

第一种

对,就是整个springboot工程启动器的jar包版本,这个jar包的版本和其他版本不匹配就没法调用mysql服务。如图,我之前写的版本是2.0.1,当我改成2.0.6之后项目启动成功了

ps:springcloud项目中spring-boot-starter-parent这个jar包一般都是在父工程里的哦

第二种

spingboot默认会自动找数据源,当我们的springboot启动器版本找不到数据源时,我们干脆就不让他自己找,跳过这一步,直接让springboot启动器的上一步找到yml文件中的数据库配置信息,这种方式只需要在这个微服务项目的application.class文件的@SpringBootApplication注解上加一个限制条件即可,不让他自动扫描数据源

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

项目也可以正常启动

发布了308 篇原创文章 · 获赞 157 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/Delicious_Life/article/details/104150461
今日推荐