You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot启动报错:DataSource配置失败,Nacos数据源已配置仍异常

SpringBoot集成Druid、Nacos、MyBatis启动报错排查

报错日志

2024-10-05 15:56:41.577 |main |INFO  |org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener:136 |

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-10-05 15:56:41.725 |main |ERROR |org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter:40 |

***************************
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).

报错提示未指定DataSource的url属性且无法配置嵌入式数据源,原因是无法确定合适的驱动类。已确认Nacos中的动态数据源配置完整,但启动仍异常,以下是相关代码及排查方向:

启动类代码

@SpringBootApplication(scanBasePackages = {"com.xx"})
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.xx.generator.*")})
@Slf4j
@EnableFeignClients
@EnableDiscoveryClient
@EnableScheduling
@EnableAsync
public class PublishApplication {
    public static void main(String[] args) {
        SpringApplication.run(PublishApplication.class,args);
    }
}

本地启动配置

spring.cloud.nacos.config.file-extension=properties
spring.config.import=optional:nacos:mini-publish-server,optional:nacos:es,optional:nacos:redis,optional:nacos:public,optional:nacos:sa-token
spring.cloud.nacos.config.server-addr=172.16.102.25:8847,172.16.102.26:8847,172.16.102.27:8847
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=77tLQHAccDZZjWF
spring.cloud.nacos.config.namespace=ynhhz-mini-media-platform

spring.cloud.nacos.discovery.file-extension=properties
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=77tLQHAccDZZjWF
spring.cloud.nacos.discovery.server-addr=172.16.102.25:8847,172.16.102.26:8847,172.16.102.27:8847
spring.cloud.nacos.discovery.namespace=ynhhz-mini-media-platform

Nacos数据源配置

spring.datasource.druid.web-stat-filter.enabled=false
spring.datasource.druid.stat-view-servlet.enabled=false
spring.datasource.druid.stat-view-servlet.allow=
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=1aG%3dP#94v
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=100
spring.datasource.druid.filter.stat.merge-sql=true
spring.datasource.druid.filter.wall.config.multi-statement-allow=true
spring.datasource.dynamic.druid.initial-size=5
spring.datasource.dynamic.druid.min-idle=5
spring.datasource.dynamic.druid.max-active=20
spring.datasource.dynamic.druid.max-wait=600000
spring.datasource.dynamic.druid.time-between-eviction-runs-millis=60000
spring.datasource.dynamic.druid.min-evictable-idle-time-millis=300000
spring.datasource.dynamic.druid.max-evictable-idle-time-millis=900000
spring.datasource.dynamic.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.dynamic.druid.test-while-idle=true
spring.datasource.dynamic.druid.test-on-borrow=false
spring.datasource.dynamic.druid.test-on-return=false
spring.datasource.dynamic.primary=master
spring.datasource.dynamic.datasource.master.username=sprint01
spring.datasource.dynamic.datasource.master.password=Sprint02@mysql
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://172.16.102.25:3306/ynhhz_mini_media_platform?useSSL=false&serverTimezone=Asia/Shanghai

问题原因及解决办法

1. 排除默认数据源自动配置

Spring Boot默认的数据源自动配置会在Nacos配置拉取前执行,导致读取不到动态数据源配置。修改启动类,排除相关自动配置类:

@SpringBootApplication(
    scanBasePackages = {"com.xx"},
    exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}
)
// 其他注解保持不变
public class PublishApplication {
    // ...
}

2. 检查动态数据源依赖

确保项目中引入了dynamic-datasource-spring-boot-starter依赖,而非仅Druid依赖,该starter负责解析spring.datasource.dynamic前缀的配置:

<!-- Maven依赖示例 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.6.1</version>
</dependency>

3. 确认Nacos配置是否加载成功

  • 移除spring.config.import中的optional:前缀,这样如果Nacos配置拉取失败会直接报错,便于排查配置拉取问题:
    spring.config.import=nacos:mini-publish-server,nacos:es,nacos:redis,nacos:public,nacos:sa-token
    
  • 开启debug日志,启动时观察Nacos配置拉取日志,确认spring.datasource.dynamic.datasource.master.url等配置是否被正确加载。

4. 验证Nacos配置归属

确认Nacos中的数据源配置是否在指定的ynhhz-mini-media-platform命名空间下,且对应的dataId是mini-publish-server(与spring.config.import中的配置一致)。如果数据源配置在其他dataId中,需要将其添加到spring.config.import列表。

内容的提问来源于stack exchange,提问作者Chuangbo Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 13:37:05