alibaba/spring-cloud-alibaba

After upgrading from `2023.0.1.2` to `2023.0.1.3`, my project fails to start

Opened this issue · 11 comments

Framework versions

  • SpringBoot Version: 3.3.5
  • SpringCloud Version: 2023.0.3
  • SpringCloudAlibaba : 2023.0.1.2 -> 2023.0.1.3

Configuration in bootstrap.yml

spring:
  application:
    name: xxxxxx
  cloud:
    nacos:
      config:
        file-extension: yml
      server-addr: x.x.x.x:xxxx
      username: xxxx
      password: xxxx

Configuration of DataSource in Nacos:

spring:
  datasource:
    url: jdbc:mysql://xxxxx/xxxx
    username: xxxx
    password: xxxx

Error Message

  • After upgrading SpringCloudAlibaba from 2023.0.1.2 to 2023.0.1.3, my project fails to start with the following errors:
***************************
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


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (the profiles dev are currently active).
  • If downgraded SpringCloudAlibaba to 2023.0.1.2, it immediately works ok.

感觉不像是 srping cloud alibaba 的问题,sca 没有和数据库相关的代码部分。

可以看看最新的 spring boot 版本和用的 orm 框架是不是兼容。或者能提供一个复现的最简例子,我们本地复现看看

错误信息显示的是数据库问题,是因为服务启动时数据库相关内容加载的比较早。本质是因为无法读取到Nacos 的配置,读不到 Nacos 的配置所以首先抛出数据库连接问题。

这个问题与 #3877 #3874#3876 是同一个问题。2023.0.1.2 运行正常,升级到 2023.0.1.3 就会出问题。

2023.0.1.3 目测最大的变化是提取出了一个配置模块。bootstrap 和 import 两种配置读取方式一直都是同时支持的,逻辑上不应该重构了代码就支持某一种了。个人猜测是 #3878 所致。

感觉不像是 srping cloud alibaba 的问题,sca 没有和数据库相关的代码部分。

可以看看最新的 spring boot 版本和用的 orm 框架是不是兼容。或者能提供一个复现的最简例子,我们本地复现看看

这个是例子:
springboot-alibaba.zip

把 application.yml 改为 bootstrap.yml

错误信息显示的是数据库问题,是因为服务启动时数据库相关内容加载的比较早。本质是因为无法读取到Nacos 的配置,读不到 Nacos 的配置所以首先抛出数据库连接问题。

这个问题与 #3877 #3874#3876 是同一个问题。2023.0.1.2 运行正常,升级到 2023.0.1.3 就会出问题。

2023.0.1.3 目测最大的变化是提取出了一个配置模块。bootstrap 和 import 两种配置读取方式一直都是同时支持的,逻辑上不应该重构了代码就支持某一种了。个人猜测是 #3878 所致。

我也碰到同样问题,在创建数据库DataSource时,读取不到nacos的数据库配置信息。

错误信息显示的是数据库问题,是因为服务启动时数据库相关内容加载的比较早。本质是因为无法读取到Nacos 的配置,读不到 Nacos 的配置所以首先抛出数据库连接问题。
这个问题与 #3877 #3874#3876 是同一个问题。2023.0.1.2 运行正常,升级到 2023.0.1.3 就会出问题。
2023.0.1.3 目测最大的变化是提取出了一个配置模块。bootstrap 和 import 两种配置读取方式一直都是同时支持的,逻辑上不应该重构了代码就支持某一种了。个人猜测是 #3878 所致。

我也碰到同样问题,在创建数据库DataSource时,读取不到nacos的数据库配置信息。

可以临时改成 Import 方式,就可以用了。见:#3882

在 Maven 仓库发现有 2023.0.3.2 版本, 升级到 2023.0.3.2 后,该问题依然存在。

可以临时改成 Import 方式,就可以用了。见:#3882

bootstrap.yml 改成:

spring:
  application:
    name: xxxxxx
  cloud:
    nacos:
      config:
        file-extension: yml
      server-addr: x.x.x.x:xxxx
      username: xxxx
      password: xxxx
  config:
    import:
      - nacos:${spring.application.name}?refreshEnabled=true

确实就正常了。

以后版本, 这个配置项 spring.config.import 都是必须的了吗?
不添加这个配置项就不行了是吗?

可以临时改成 Import 方式,就可以用了。见:#3882

bootstrap.yml 改成:

spring:
  application:
    name: xxxxxx
  cloud:
    nacos:
      config:
        file-extension: yml
      server-addr: x.x.x.x:xxxx
      username: xxxx
      password: xxxx
  config:
    import:
      - nacos:${spring.application.name}?refreshEnabled=true

确实就正常了。

以后版本, 这个配置项 spring.config.import 都是必须的了吗? 不添加这个配置项就不行了是吗?

我试了 2023.0.3.2 版本,问题应该解决了,至少在我本地不使用 import 方式也可以运行了。但是,还有其它问题,见 #3919

有说法是这样的,似乎以后就只支持 import 方式,有 SCA 的 Comitter 是这样说的。但是感觉现在还不明确,官网文档相关内容也还是各种方式都支持。

文档没有来得及更新,后面官网会改成 import 引入得方式

可以临时改成 Import 方式,就可以用了。见:#3882

bootstrap.yml 改成:

spring:
  application:
    name: xxxxxx
  cloud:
    nacos:
      config:
        file-extension: yml
      server-addr: x.x.x.x:xxxx
      username: xxxx
      password: xxxx
  config:
    import:
      - nacos:${spring.application.name}?refreshEnabled=true

确实就正常了。

以后版本, 这个配置项 spring.config.import 都是必须的了吗? 不添加这个配置项就不行了是吗?

是的,这个是现在社区主推的一个配置方式,之前的老版本配置不建议用了