【问题标题】:Spring Boot Application: how to create shema using flyway on startup?Spring Boot 应用程序:如何在启动时使用 flyway 创建模式?
【发布时间】:2020-07-23 05:19:30
【问题描述】:

有弹簧启动应用程序。 这是配置:

spring
  flyway:
    locations: classpath:db/migration
    baseline-on-migrate: true
    schemas: ${app.db.schema}
    placeholders:
      schema: ${app.db.schema}
    init-sqls: CREATE SCHEMA IF NOT EXISTS ${app.db.schema}

它不起作用。

我需要在 flyway 运行迁移之前创建 db 架构。

【问题讨论】:

    标签: java spring-boot database-migration liquibase flyway


    【解决方案1】:

    Flyway 默认尝试从classpath:db/migration 文件夹中读取数据库迁移脚本。

    所有迁移脚本都必须遵循特定的命名约定 - V<VERSION_NUMBER>__<NAME>.sql

    src/main/resources/db/migration目录下新建一个名为V1__Create_Tables.sql的文件,并添加sql脚本,例如:

    -- ----------------------------
    -- Schema for helloservice
    -- ----------------------------
    CREATE SCHEMA IF NOT EXISTS helloworld;
    -- ----------------------------
    -- Table structure for user
    -- ----------------------------
    CREATE TABLE helloworld.users (
      id                  BIGSERIAL        PRIMARY KEY NOT NULL UNIQUE,
      username            VARCHAR(255)     UNIQUE NOT NULL,
      password            VARCHAR(255)     NOT NULL,
      first_name          VARCHAR(255),
      middle_name         VARCHAR(255),
      last_name           VARCHAR(255),
      email               VARCHAR(255),
      enabled             bool             NOT NULL DEFAULT true,
      account_locked      bool             NOT NULL,
      account_expired     bool             NOT NULL,
      credential_expired  bool             NOT NULL,
      created_on timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
      updated_on timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP
    );
    COMMENT ON TABLE helloworld.users IS 'User table';
    

    当您运行应用程序时,flyway 将自动检查当前数据库版本并应用任何待处理的迁移。默认情况下,不需要其他属性。您还可以在此脚本中创建模式。或者,如果您指定不存在的方案,flyway 会为您完成。

    如果您使用的是休眠,请检查此属性:

    spring.jpa.hibernate.ddl-auto=validate
    

    有关详细信息,请参阅instructions

    【讨论】:

      【解决方案2】:

      有文档链接:https://flywaydb.org/documentation/commandline/migrate#schemas

      实际上 FlyWay 负责创建不存在的模式。

      以下是更改日志历史表中的示例:

      【讨论】:

        猜你喜欢
        • 2020-05-16
        • 2020-08-20
        • 2019-11-22
        • 2021-03-18
        • 2020-04-20
        • 2018-01-19
        • 2016-07-26
        • 1970-01-01
        • 2019-02-19
        相关资源
        最近更新 更多