Quarkus原生镜像集成测试TestContainer数据源配置不生效问题
问题根因
配置不生效是两个机制共同导致的:
@QuarkusTestResource默认的配置注入范围仅覆盖运行测试用例的JVM进程,不会自动将start()方法返回的配置项,作为启动参数传递给提前构建完成的原生可执行文件cos-runner。原生镜像构建阶段已经将默认数据源配置(默认JDBC地址、quarkus/quarkus默认账号密码、default默认逻辑库)固化为默认启动参数。- 框架默认开启的DevServices能力,检测到原生应用启动时没有可用的数据源配置,会自动拉起一个默认配置的PostgreSQL测试容器供应用连接,也就是你日志里49318端口的那个实例;而你自定义
NativeTestResources拉起的49320端口的PostgreSQL,仅在测试JVM进程内可见,根本没有被原生应用读取到。
修复方案
按以下步骤调整即可:
- 关闭测试环境下DevServices自动拉起数据源的逻辑,避免默认配置抢占优先级。在测试资源目录的
application.properties中添加配置:quarkus.devservices.enabled=false - 修改测试类上的
@QuarkusTestResource注解,添加参数放开配置传递限制,让测试资源返回的配置可以注入到被测原生应用的启动参数中,修改后注解如下:@QuarkusIntegrationTest @QuarkusTestResource(value = NativeTestResources.class, restrictToAnnotatedType = false)
调整完成后重新执行测试,查看原生runner的启动命令,会发现已经携带了你自定义的JDBC连接串、账号密码参数,应用会正常连接你在测试资源中初始化的PostgreSQL容器,不会再自动拉起49318端口的默认数据库实例。
内容的提问来源于stack exchange,提问作者KilkaLosowychWyrazów
相关产品推荐
相关产品推荐

