如果我在我们的代码库中运行某个测试套件,当我尝试启动我们的 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 错误时,我检查过的所有内容对于状态来说似乎都是一样的。
尝试这样的事情:
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
不,运行你的脚本。