无法启动 quarkus 进行测试。 “数据源‘<default>’未配置。” YAML配置问题

问题描述 投票:0回答:1

我正在通过测试介绍我的新 Quarkus REST API 中的功能。我目前正在学习如何使用 Quarkus 开发微服务,并且正在尝试 Liquibase。该项目包括使用 H2 进行测试和 Liquibase。 Quarkus dev 工作得很好,但是当我运行测试时,我遇到了这些错误:


java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus

    at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:638)
    at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:722)
    at java.base/java.util.Optional.orElseGet(Optional.java:364)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.RuntimeException: Failed to start quarkus
    at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
    at io.quarkus.runtime.Application.start(Application.java:101)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.runner.bootstrap.StartupActionImpl.run(StartupActionImpl.java:285)
    at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:252)
    at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:605)
    at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:655)
    ... 1 more
Caused by: java.lang.IllegalStateException: Error starting Liquibase
    at io.quarkus.liquibase.runtime.LiquibaseRecorder.doStartActions(LiquibaseRecorder.java:90)
    at io.quarkus.deployment.steps.LiquibaseProcessor$startLiquibase1744275855.deploy_0(Unknown Source)
    at io.quarkus.deployment.steps.LiquibaseProcessor$startLiquibase1744275855.deploy(Unknown Source)
    ... 8 more
Caused by: jakarta.enterprise.inject.CreationException: Error creating synthetic bean [1d48OwssPZoQytD2p8kGRAP54yY]: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unable to find datasource '<default>' for Liquibase: Datasource '<default>' is not configured. To solve this, configure datasource '<default>'. Refer to https://quarkus.io/guides/datasource for guidance.
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.doCreate(Unknown Source)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.create(Unknown Source)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.create(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.c18(Unknown Source)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.computeIfAbsent(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:21)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_ClientProxy.arc$delegate(Unknown Source)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_ClientProxy.getConfiguration(Unknown Source)
    at io.quarkus.liquibase.runtime.LiquibaseRecorder.doStartActions(LiquibaseRecorder.java:65)
    ... 10 more
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unable to find datasource '<default>' for Liquibase: Datasource '<default>' is not configured. To solve this, configure datasource '<default>'. Refer to https://quarkus.io/guides/datasource for guidance.
    at io.quarkus.liquibase.runtime.LiquibaseRecorder$1.apply(LiquibaseRecorder.java:42)
    at io.quarkus.liquibase.runtime.LiquibaseRecorder$1.apply(LiquibaseRecorder.java:32)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.createSynthetic(Unknown Source)
    ... 23 more
Caused by: io.quarkus.runtime.configuration.ConfigurationException: Datasource '<default>' is not configured. To solve this, configure datasource '<default>'. Refer to https://quarkus.io/guides/datasource for guidance.
    at io.quarkus.datasource.common.runtime.DataSourceUtil.dataSourceNotConfigured(DataSourceUtil.java:47)
    at io.quarkus.liquibase.runtime.LiquibaseRecorder$1.apply(LiquibaseRecorder.java:39)
    ... 25 more

我尝试使用 IntelliJ Idea 和 quarkus 测试在终端中运行测试。结果总是一样的。

我的项目\src est 资源文件夹:

application-dev.yml:(与src\main中相同 资源并且它正在开发模式下工作)

quarkus:
  datasource:
    db-kind: h2
    username: sa
    password: password
    jdbc:
      driver: org.h2.Driver
      url: jdbc:h2:file:./database;AUTO_SERVER=true;DB_CLOSE_DELAY=-1;
  liquibase:
    migrate-at-start: false
  hibernate-orm:
    log:
      sql: true
    database:
      generation: drop-and-create
    scripts:
      generation:
        create-target: dev-changelog/release-1.0/migrations/schema-1.sql
        drop-target: dev-changelog/release-1.0/migrations/drop-1.sql
    sql-load-script: dev-changelog/release-1.0/migrations/level-1.sql

测试类示例:

@QuarkusTest
public class LevelResourceTest {

    @Test
    public void testPostRequest() {
        //REST ASSURED TEST
    }
}

我尝试向 pom.xml 添加更多可能相关的依赖项,但仍然存在相同的问题。我通过更改 H2 DB 的 URL 尝试了配置。而且我在网上找不到有类似问题的人。重新加载、maven clean install、重新启动一切也没有帮助。

它的预期行为显然是运行测试。我之前的项目使用几乎相同的配置,没有任何问题。

java yaml h2 quarkus
1个回答
0
投票

我找到了解决方案。问题是 Quarkus 使用 application.yml 运行测试,而不是 application-dev.yml。所以我只是将 application-dev 重命名为 application。现在可以了。但由于某种原因,我的其他项目使用 application-dev 运行测试。

© www.soinside.com 2019 - 2024. All rights reserved.