如何在Quarkus DevServices的PostgreSQL测试容器中运行初始化脚本?
在Quarkus DevServices的PostgreSQL测试容器中执行初始化脚本
要解决Liquibase迁移前需先创建数据库模式的问题,你需要调整Quarkus的DevServices配置,而非手动指定Testcontainers的JDBC URL参数,具体步骤如下:
1. 移除无效的手动配置
删掉你之前添加的这两行配置——DevServices会自动接管数据源创建,手动指定URL和驱动会干扰它的自动逻辑:
quarkus.datasource.jdbc.url=jdbc:tc:postgresql:13:///quarkus?TC_INITSCRIPT=testcontainer/schema-init.sql quarkus.datasource.jdbc.driver=org.testcontainers.jdbc.ContainerDatabaseDriver
2. 添加DevServices专属初始化脚本配置
在application.properties(或application-dev.properties,仅针对dev模式生效)中添加以下配置:
# 指定DevServices启动PostgreSQL容器时执行的初始化脚本 quarkus.datasource.devservices.init-script=testcontainer/schema-init.sql
3. 确认脚本路径正确性
确保schema-init.sql文件放在正确的资源目录下:
- 若为dev模式通用,放在
src/main/resources/testcontainer/下 - 若仅用于测试,放在
src/test/resources/testcontainer/下
Quarkus会自动识别该路径,在启动PostgreSQL测试容器时优先执行脚本,之后再触发Liquibase的数据库迁移,避免因缺少模式导致迁移失败。
额外说明
DevServices的init-script配置是Quarkus专为Testcontainers集成设计的,它会确保脚本在Liquibase等数据库迁移工具执行前运行,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Herr Derb
相关产品推荐
相关产品推荐

