小编N. *_*hmi的帖子

使用 Flyway 和 Spring Boot 迁移具有不同生命周期的多个模式

迁飞路线常见问题分开3箱子多种模式的:

  1. 多个相同的模式
  2. 模式不同,但具有相同的生命周期
  3. 模式有一个独特的生命周期,或者必须是自主的和干净的分离

我们正在使用 Maven 构建一个多模块 Spring Boot 4.5.9 项目。每个模块都是完全独立的,并且有自己的数据库模式。所有模式都驻留在一个数据库中,因此只有一个 Spring 数据源。

因为模块是独立的,我们想分别管理它们各自的模式迁移,所以上面的选项(3)是最合适的。

但是,我找不到按照 Flyway FAQ 建议的方式配置 Spring Boot 的 Flyway 集成的方法:

使用多个 Flyway 实例。每个实例管理自己的模式并引用自己的模式历史表。将每个架构的迁移放在不同的位置。

理想情况下,每个模块都有自己的db/migration文件夹,其中包含自己的迁移 SQL 脚本。每个模块脚本的版本应该独立于其他模块中的脚本版本,并且每个模块的迁移历史应该存储在该模块模式的表中。

如果我将迁移脚本放在每个模块的resources/db/migration文件夹中,flyway 会检测到它们,然后抱怨:

org.flywaydb.core.api.FlywayException: Found more than one migration with version 0
Run Code Online (Sandbox Code Playgroud)

有人知道如何完成所需的设置吗?

PS 所有这一切的最终目标是能够(有一天,当系统扩展时)将这些模块拉入单独的服务中,而无需经历地狱将数据库分解为多个部分。

flyway spring-boot

9
推荐指数
1
解决办法
2437
查看次数

使用 spring-boot 2.0.2.RELEASE 并且 FlyWay 未运行。没有错误

我有一个非常简单的设置,全新的项目,并且由于某种原因 Flyway 从不初始化。没有错误。我花了几个小时试图弄清楚我做错了什么,但无济于事。

此外,我使用 Spring Boot 1.4.2.RELEASE 对另一个项目进行了几乎相同的设置。唯一的区别是 application.yml 中的 Flyway 配置现在在“spring”上下文下,而不是在根目录下。

如果有人能看到我遗漏了什么,或错别字或其他什么,我将不胜感激。

我还尝试注释掉 flyway 特定的数据源配置,以便它只使用 spring 数据源,但这没有区别。

谢谢,托尼亚

pom.xml(相关部分):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

application.yml(相关部分)

spring.profiles: default

spring:
    flyway:
        url: jdbc:mysql://localhost:3306/test_schema?tinyInt1isBit=false
        user: adminuser
        password: adminuser

    datasource:
        url: jdbc:mysql://localhost:3306/test_schema?tinyInt1isBit=false
        username: restricteduser
        password: restricteduser
        driver-class-name: com.mysql.jdbc.Driver

    jpa:
        database: MYSQL
        hibernate.ddl-auto: none
        show-sql: true
        properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect
Run Code Online (Sandbox Code Playgroud)

数据库设置脚本:

CREATE SCHEMA `test_schema`;

CREATE USER IF NOT EXISTS 'restricteduser'@'%' IDENTIFIED BY 'restricteduser';
GRANT SELECT,INSERT,UPDATE,DELETE ON test_schema.* TO 'restricteduser'@'%' WITH GRANT OPTION; …
Run Code Online (Sandbox Code Playgroud)

flyway spring-boot

6
推荐指数
1
解决办法
5280
查看次数

Flyway可以从jar中迁移吗?

我有一个内置到 jar 文件中的子项目。src/main/resources/db/migration/V1_1__create_table.sql项目里有。

如何从这个 jar 运行迁移?

我尝试了这个./flyway migrate -url=jdbc:postgresql://127.0.0.1:5432/myproject -user=myproject -password=myproject -locations=classpath:~/src/myproject/target/myproject-0.0.1-SNAPSHOT.jar,但出现以下错误:

Database: jdbc:postgresql://127.0.0.1:5432/myproject (PostgreSQL 9.6) WARNING: Unable to resolve location classpath:~/src/myproject/target/myprojectn-0/0/1-SNAPSHOT/jar WARNING: Schema "public" has version 0.0.6, but no migration could be resolved in the configured locations !

如何从 jar 运行迁移?谢谢。

java postgresql database-migration flyway

5
推荐指数
1
解决办法
4177
查看次数

Mockito - 验证一个方法是否调用同一类中的另一个方法

我正在尝试测试一个方法是否调用同一类中的另一个方法。例子:

public class Foo {

    public void bar(String a){
        switch(a) {
            case "callBaz":
                baz(a);
                break;
            case "callBat":
                bat(a);
                break;
            default:
                System.out.println("Input was " + a);
        }
    } 

    public void baz(String b){
        System.out.println(b);
    }

    public void bat(String c){
        System.out.println(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在类本身上进行模拟验证:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
public class FooTest {
    @Test
    public void testBazCalledFromBar(){
        Foo foo = new Foo();
        foo.bar("callBaz");
        Mockito.verify(foo).baz("callBaz");
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了例外:

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to verify() is of type Foo and is not …
Run Code Online (Sandbox Code Playgroud)

java junit mockito

2
推荐指数
1
解决办法
5398
查看次数

版本中无效字符的 Flyway Exception

我正在尝试将 Flyway 与我的简单 maven 项目集成以进行学习。

我正在使用以下插件和配置:

            <plugin>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <version>4.0.3</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.9</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <url>jdbc:mysql://${database.host}:${database.port}/${database.schema}?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8</url>
                    <user>${database.user}</user>
                    <password>${database.password}</password>
                    <sqlMigrationPrefix>V_</sqlMigrationPrefix>
                    <sqlMigrationSeparator>__</sqlMigrationSeparator>
                    <locations>
                        <location>filesystem:src/main/resources/db/migrations</location>
                    </locations>
                </configuration>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

这是我的示例迁移 sql 的名称:

V_1__create_new_table.sql
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么,但我不断收到以下异常:

org.flywaydb.core.api.FlywayException: Invalid version containing non-numeric characters. Only 0..9 and . are allowed. Invalid version: V.1
Run Code Online (Sandbox Code Playgroud)

我确实参考了以下问题,正如您在配置中看到的那样,我已经完成了要求的操作: 类似问题

maven flyway

1
推荐指数
1
解决办法
1955
查看次数