Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured

发布时间 2023-03-26 16:38:34作者: 枫叶艾辰
一、问题背景

利用Nacos作为配置中心和注册中心,将数据库配置放在项目的yml文件时正常输出,放在Nacos配置中出现如下问题

二、报错截图如下

三、我的项目配置如下

#微服务配置
spring:
  application:
    name: content-api # 服务名content-api-dev.yaml
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery: #服务注册相关配置
        namespace: d30c3e20-af6b-4bd5-9993-d4a9eacaedad
        group: xuecheng-plus-project
#        server-addr: 127.0.0.1:8848
      config: #配置文件相关配置
        namespace: d30c3e20-af6b-4bd5-9993-d4a9eacaedad
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
  profiles:
    active: dev       # 环境名称
四、分析问题

(1) 利用nacos客户端获取配置

    @Test
    void contextLoads() {
        try {
            Properties properties = new Properties();
            properties.put("serverAddr", "127.0.0.1:8848");
            properties.put("namespace", "d30c3e20-af6b-4bd5-9993-d4a9eacaedad");
            ConfigService configService = NacosFactory.createConfigService(properties);
            String contentInfo = configService.getConfig("content-api-dev.yml", "xuecheng-plus-project", 1000L);
            System.out.println("contentInfo:" + contentInfo);
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
    }



说明Nacos配置正常,可以获取

五、问题原因

日志中dataId是content-api.yaml, 而Nacos中配置文件名称是content-api-dev.yml,仔细对比yml后发现file-extension属性写错了yaml

六、解决方式

修改后的yml配置,将file-extension属性换成了yml

#微服务配置
spring:
  application:
    name: content-api # 服务名content-api-dev.yaml
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery: #服务注册相关配置
        namespace: d30c3e20-af6b-4bd5-9993-d4a9eacaedad
        group: xuecheng-plus-project
      config: #配置文件相关配置
        namespace: d30c3e20-af6b-4bd5-9993-d4a9eacaedad
        group: xuecheng-plus-project
        file-extension: yml
        refresh-enabled: true
  profiles:
    active: dev       # 环境名称