Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured
一、问题背景
利用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
(2)出现加载的配置是父模块中application.properties中定义的应用名称,处理方式是在子模块处同样加个application.properties文件,即使是空的
六、解决方式
修改后的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 # 环境名称