当前位置: 首页 > 知识库问答 >
问题:

flyway:init找不到初始sql脚本

彭令秋
2023-03-14

我用flyway maven插件做了一些实验。我没有空数据库,所以我需要一个初始ddl脚本。我遵循flyway wiki中的说明:

我将sql脚本命名为V1\uu Base\u Migration。sql,在src/main/resources/db/migration中。

flyway-maven-plugin的配置如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>1.7</version>
            <configuration>
                <driver>org.hsqldb.jdbcDriver</driver>
                <url>jdbc:hsqldb:hsql://localhost:9001/testdb</url>
                <user>SA</user>
                <password></password>
                <schemas>PUBLIC</schemas>
                <initialVersion>1</initialVersion>
                <initialDescription>Base Migration</initialDescription>
            </configuration>
        </plugin>
    </plugins>
</build>

当我在cmd上调用mvn install flyway:init并查看数据库中的运行时,我可以找到flyway的版本表,但找不到该表,该表的ddl在sql脚本中。

当我查看Maven的调试日志时,我找不到任何运行sql脚本的提示。

[DEBUG]   Excluded: classworlds:classworlds:jar:1.1
[DEBUG] Configuring mojo com.googlecode.flyway:flyway-maven-plugin:1.7:init from   plugin realm ClassRealm[plugin>com.googlecode.flyway:flyway-maven-plugin:1.7, parent: sun.misc.Launcher$AppClassLoader@11799e7]
[DEBUG] Configuring mojo 'com.googlecode.flyway:flyway-maven-plugin:1.7:init' with include-project-dependencies configurator -->
[DEBUG]   (f) driver = org.hsqldb.jdbcDriver
[DEBUG]   (f) initialDescription = Base Migration
[DEBUG]   (f) initialVersion = 1
[DEBUG]   (f) schemas = PUBLIC
[DEBUG]   (f) settings = org.apache.maven.execution.SettingsAdapter@1aa246e
[DEBUG]   (f) url = jdbc:hsqldb:hsql://localhost:9001/testdb
[DEBUG]   (f) user = SA
[DEBUG] -- end configuration --
[DEBUG] Database: HSQL Database Engine
[INFO] Hsql does not support locking. No concurrent migration supported.
[DEBUG] Schema: PUBLIC
[INFO] Creating Metadata table: schema_version (Schema: PUBLIC)
[DEBUG] Found statement at line 17: CREATE TABLE PUBLIC.schema_version (
version VARCHAR(20) PRIMARY KEY,
description VARCHAR(100),
type VARCHAR(10) NOT NULL,
script VARCHAR(200) NOT NULL,
checksum INT,
installed_by VARCHAR(30) NOT NULL,
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
execution_time INT,
state VARCHAR(15) NOT NULL,
current_version BIT NOT NULL,
CONSTRAINT PUBLIC.schema_version_script_unique UNIQUE (script)
);
[DEBUG] Found statement at line 30: CREATE INDEX    PUBLIC.schema_version_current_version_index ON PUBLIC.schema_version (current_version);
[DEBUG] Executing SQL: CREATE TABLE PUBLIC.schema_version (
version VARCHAR(20) PRIMARY KEY,
description VARCHAR(100),
type VARCHAR(10) NOT NULL,
script VARCHAR(200) NOT NULL,
checksum INT,
installed_by VARCHAR(30) NOT NULL,
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
execution_time INT,
state VARCHAR(15) NOT NULL,
current_version BIT NOT NULL,
CONSTRAINT PUBLIC.schema_version_script_unique UNIQUE (script)
)
[DEBUG] Executing SQL: CREATE INDEX PUBLIC.schema_version_current_version_index ON PUBLIC.schema_version (current_version)
[DEBUG] Metadata table created: schema_version (Schema: PUBLIC)

我做错了什么吗?如果有人能给我一个提示,我做错了什么,那就太好了。

你可以在[github]中找到整个Maven测试项目(https://github.com/skosmalla/flyway-maven-test)

顺致敬意,

桑德拉

共有1个答案

胡劲
2023-03-14

flyway:当您的生产模式中有现有表(例如ABC和XYZ)并且您决定开始使用flyway来管理DB的生命周期时,init非常有用。

您可以将生产架构的结构转储到sql脚本中,例如V0\u 9\u Prod.sql,以便在本地执行。通过这种方式,您可以将dev DB与PROD的当前结构对齐。在添加功能时,您可以添加其他迁移,如V1\uu Base\u迁移。sql。

但在部署到PROD时,您不希望再次运行V0\u 9\u PROD.sql。为了避免这种情况,可以使用0.9对PROD模式进行flyway:init。

当运行迁移时,它将跳过V0\u 9\u生产sql,并直接移动到V1\u Base\u迁移。sql。

如果这种情况不适用于您,您可以简单地运行flyway:migrate。不需要flyway:首先初始化。

 类似资料:
  • 引入地图 一般项目中,对于 vue-amap 的初始化只需要调用 initAMapApiLoader 方法即可。 NPM 安装: import VueAMap from 'vue-amap'; Vue.use(VueAMap); VueAMap.initAMapApiLoader({ key: 'YOUR_KEY', plugin: ['AMap.Scale', 'AMap.OverVi

  • 5.a. 运行级别 启动您的系统 在系统启动时, 您会看到许多的文字漂浮而过. 如果您足够留心, 会发现每次重启系统时这些文字的内容其实都是一样的. 这一系列动作被称之为启动流程 (boot sequence) 并且已 (或多或少) 固定地 (statically) 定义下来了. 首先, 您的启动器会把启动器配置文件中定义的内核映象加载到内存中, 此后它告诉 CPU 去运行内核. 当内核已加载并运

  • E/FlatterLoader(4087):颤振初始化失败。颤振加载程序(4087):java。util。同时发生的ExecutionException:java。lang.UnsatifiedLink错误:dalvik。系统PathClassLoader[DexPathList[[zip文件]/data/app/com.kmz.TheCounsler-1/base.apk“],NativeLib

  • 目前我正在做一个项目,我需要将第三方JAR转换到我们的Karaf D-OSGi应用程序中。我们不想更改jar中的任何代码,但由于源代码有限,我们可以调试到jar中。 问题是第三方jar依赖于log4j-1.2.9 jar。然而,当在运行时调用第三方jar时,无法从第三方jar中找到logManager.class。 组织。阿帕奇。cxf。拦截器。错误:org/apache/log4j/LogMan

  • 我尝试使用 Websphere 8.5 完整配置文件将应用程序转换为 Liberty 配置文件,但我遇到了有关不兼容的问题。 无法找到初始上下文工厂 我知道班级的位置com.ibm.ws.ejb.thinclient_8.0.0.jar在完整的配置文件中,但我不能在Liberty配置文件中找到相关的,还有一件事,因为我正在做维护应用程序,所以班级要看看。 com . IBM . WebSphere