检测 sql 数据库是否有以下内容:发现没有元数据表的非空模式 'foobar'

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

如果我在我们的代码库中运行某个测试套件,当我尝试启动我们的 spring boot 应用程序时,我最终会遇到这个错误:

Caused by: com.googlecode.flyway.core.api.FlywayException: Found non-empty schema 'foobar' without metadata table! Use init() first to initialize the metadata table.

我有一个脚本可以解决这个问题并使数据库处于良好状态。然后我可以启动应用程序。

我想检测此状态并自动运行此脚本作为应用程序运行配置的一部分。

在 java 代码中,我可以访问 java.sql.Connection。

我可以用这个连接对象检测到这个问题吗?

我尝试检查 connection.getMetadata() 和 connection.getSchema()。还有 connection.getMetadata.getSchemas()。但是到目前为止,当一切正常并且收到 FlyWay 错误时,我检查过的所有内容对于状态来说似乎都是一样的。

java spring-boot flyway
1个回答
0
投票

尝试这样的事情:

    try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) FROM foobar.flyway_schema_history")) {
    ResultSet rs = statement.executeQuery();
    if (!(rs.next() && rs.getInt(1) > 0)) {
        // metadata table does not exist, run script to resolve the issue
        // run your script
    }
    // start Spring Boot application
}

此代码检查您的元数据表是否存在。

If
不,运行你的脚本。

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