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

禁用DevServices后Quarkus仍自动用Docker启动PostgreSQL的问题

问题分析与解决方案

可能的原因

  1. 配置文件优先级覆盖:Quarkus在dev模式下会优先加载application-dev.yml(若存在),如果该文件中未禁用Dev Services,会直接覆盖application.yml的设置。
  2. 环境变量/启动参数覆盖:环境变量QUARKUS_DATASOURCE_DEVSERVICES_ENABLED=true或启动时添加的系统属性(如-Dquarkus.datasource.devservices.enabled=true)优先级高于配置文件,会强制启用Dev Services。
  3. Quarkus缓存未更新:旧的配置缓存导致新的禁用设置未生效。
  4. 配置层级或拼写失误:虽然你的配置看起来正确,但仍需确认是否存在缩进错误或关键字拼写错误(比如enabled误写为enable)。

解决步骤

1. 检查dev环境配置文件

  • 确认项目中是否存在src/main/resources/application-dev.yml,若存在,需在该文件中添加禁用配置:
quarkus:
  datasource:
    devservices:
      enabled: false
  • 若不需要单独的dev环境配置,可直接删除application-dev.yml,确保application.yml的配置生效。

2. 排查环境变量与启动参数

  • 查看系统环境变量中是否存在QUARKUS_DATASOURCE_DEVSERVICES_ENABLED,若值为true,将其改为false或删除该变量。
  • 检查启动命令是否带有-Dquarkus.datasource.devservices.enabled=true参数,如有则移除或改为false。

3. 清理缓存并重启应用

执行以下命令清理项目缓存,再重新启动:

mvn clean quarkus:dev

(使用Gradle则执行./gradlew clean quarkusDev)

4. 强化JDBC URL优先级配置

在application.yml中添加额外配置,确保显式指定的JDBC URL不会被Dev Services覆盖:

quarkus:
  datasource:
    devservices:
      enabled: false
      override-explicit: false  # 禁止Dev Services覆盖显式配置的JDBC URL

5. 检查Testcontainers相关依赖

确认pom.xml中没有引入不需要的Testcontainers依赖(比如用于测试的容器组件),若存在且无需使用,可移除:

<!-- 若存在以下依赖且不需要测试容器,可删除 -->
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-test-containers-postgresql</artifactId>
    <scope>test</scope>
</dependency>

验证

重启应用后,检查日志是否不再出现Creating container for image: docker.io/postgres:17的内容,同时确认应用成功连接本地PostgreSQL实例。

内容的提问来源于stack exchange,提问作者Anjan Biswas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:26:00