【问题标题】:Quarkus, Flyway can't connect to TestContainer postgresqlQuarkus、Flyway 无法连接到 TestContainer postgresql
【发布时间】:2022-01-26 08:10:13
【问题描述】:

我正在我的 quarkus 应用程序中设置 Flyway,该应用程序已经有适当的数据库设置,工作正常,但使用手动完成的 db setup (initdb()) 方法来设置其数据库。

我目前使用 postgresql testcontainer 实例进行测试,并按以下方式进行设置:

    @Override
    public Map<String, String> start() {
        log.info("STARTING test lifecycle resources.");
        Map<String, String> configOverride = new HashMap<>();

        if(MYSQL_CONTAINER == null || !MYSQL_CONTAINER.isRunning()){
            PostgreSQLContainerProvider provider = new PostgreSQLContainerProvider();
            MYSQL_CONTAINER = provider.newInstance();
            MYSQL_CONTAINER.withDatabaseName("client-demo");
            MYSQL_CONTAINER.start();
        }
        configOverride.put("quarkus.datasource.db-kind", "postgresql");
        configOverride.put("quarkus.datasource.username", MYSQL_CONTAINER.getUsername());
        configOverride.put("quarkus.datasource.password", MYSQL_CONTAINER.getPassword());
        // replaceFirst required to connect; invalidUri exception thrown otherwise
        configOverride.put("quarkus.datasource.reactive.url", MYSQL_CONTAINER.getJdbcUrl().replaceFirst("jdbc:", ""));

        log.info("Config overrides: {}", configOverride);
        return configOverride;
    }

到目前为止,这一切正常,测试代码可以按预期与数据库进行适当的交互。

但是,当我尝试将 Flyway 添加到方程式时,Flyway 似乎无法连接到数据库:

2022-01-25 14:23:03,005 INFO  [org.acm.cus.dem.uti.TestResourceLifecycleManager] (pool-4-thread-1) Config overrides: {quarkus.datasource.password=test, quarkus.datasource.db-kind=postgresql, quarkus.datasource.reactive.url=postgresql://localhost:49352/client-demo?loggerLevel=OFF, quarkus.datasource.username=test}
2022-01-25 14:23:03,695 WARN  [io.agr.pool] (agroal-11) Datasource '<default>': FATAL: password authentication failed for user "test"
2022-01-25 14:23:03,721 INFO  [org.acm.cus.dem.uti.TestResourceLifecycleManager] (main) STOPPING test lifecycle resources.
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 15.251 s <<< FAILURE! - in org.acme.cust.demo.CucumberTest
[ERROR] org.acme.cust.demo.CucumberTest.getTests  Time elapsed: 15.238 s  <<< ERROR!
java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus
Caused by: java.lang.RuntimeException: Failed to start quarkus
Caused by: org.flywaydb.core.internal.exception.FlywaySqlException: 
Unable to obtain connection from database: FATAL: password authentication failed for user "test"

有什么想法吗?

【问题讨论】:

    标签: postgresql quarkus flyway


    【解决方案1】:

    在您的配置中,您提到了反应式数据库连接。但是 Flyway 仍然需要“旧”jdbc 连接。因此,如果您仍想以反应方式使用 db,您可能必须同时配置两者。

    【讨论】:

    • 两者都配置?在我看来,两者都使用了相同的配置。我还使用了quarkus.datasource.jdbc=true 配置(并取出了我从网址中删除jbdc: 的部分),但没有任何效果
    • 你配置quarkus.datasource.jdbc.url吗?
    • 简短背景:我们还连接了反应式数据库连接。但是对于 Flyway,我们仍然需要 quarkus.io/guides/flyway 中提到的 jdbc 配置。至少 Quarkus 1.11 中我们运行它的方式是这样的。
    • 啊,没有看到该配置作为选项(可能只是错过了它)。谢谢,它似乎通过了身份验证,但现在它在测试容器中抛出了一个关于 postgresql 版本的错误。调查一下,可能是另一个问题的主题
    • 不错!是的,这是一个新问题。不幸的是,我不知道支持的 Postgres 版本。我们仍然在 10 岁左右或 11 岁左右。
    猜你喜欢
    • 2019-08-12
    • 2012-11-01
    • 2019-11-02
    • 2019-09-28
    • 2020-01-01
    • 2019-09-02
    • 1970-01-01
    • 2023-02-02
    • 2020-03-14
    相关资源
    最近更新 更多