在使用 Flyway 时,在启动时清除数据库。

8 浏览
0 Comments

在使用 Flyway 时,在启动时清除数据库。

在我的情况下,我正在使用spring-boot和gradle,并通过将compile 'org.flywaydb:flyway-core'添加到build.gradle中来添加flyway。

对于模拟运行,即在test中,我希望在每次运行之前清除数据库。我将一个重置脚本放在/src/test/resources/db/migration/V1.0__Reset.sql(真实的初始化sql脚本在/src/main/resources/db/migration/V1.1__Init.sql中),但是在运行MySQL Workbench时没有出现重置脚本的语法异常。

如何在启动时重置或清除数据库?

-- 更新 --

我尝试使用Spring的DataSourceInitializer,但是似乎Flyway脚本在DS初始化之前执行,所以会导致Hibernate语法错误,因为找不到表。

@Resource
DataSource ds;
@Bean
public DataSourceInitializer dbInit() throws FileNotFoundException, URISyntaxException {
        public DataSourceInitializer dbInit() throws FileNotFoundException, URISyntaxException {
        DataSourceInitializer re = new DataSourceInitializer();
        re.setDataSource(ds);
        re.setEnabled(true);
        String str = "classpath:sql/V1.0__Reset.sql";
        URL url = ResourceUtils.getURL(str);
        org.springframework.core.io.Resource resi = new PathResource(url.toURI());
        // new org.springframework.core.io.ClassPathResource(str)
        re.setDatabasePopulator(new ResourceDatabasePopulator(resi));
        return re;
    }

0
0 Comments

在使用flyway时清除数据库的原因是为了在应用程序启动时确保数据库是干净的。这可以通过在应用程序启动后使用ApplicationRunner来实现。在ApplicationRunner中可以使用flyway执行所需的操作,通常需要在clean之后执行migrate。

解决方法如下:

1. 创建一个名为CleanDatabase的类,实现ApplicationRunner接口。

2. 在该类中,声明一个flyway对象,用于执行flyway的相关操作。

3. 在run方法中,调用flyway的clean方法清除数据库,并在clean之后调用flyway的migrate方法执行数据库迁移。

以下是示例代码:

public class CleanDatabase implements ApplicationRunner {
    private Flyway flyway;
    public void run(ApplicationArguments args) throws Exception {
        flyway.clean();
        flyway.migrate();
    }
}

通过以上代码,可以在应用程序启动后清除数据库并执行数据库迁移操作,以确保数据库的干净状态。

0
0 Comments

清除数据库是使用Flyway时的一个常见问题。有时候,在每次启动应用程序时,我们希望清除数据库中的所有数据并重新创建表结构。这可以通过在应用程序启动时使用Flyway的clean()方法来实现。

解决方法是调用Flyway对象的clean()方法。这个方法会删除数据库中的所有数据,并将表结构恢复到初始状态。使用这个方法可以确保每次应用程序启动时,数据库都是干净的,并且表结构是最新的。

下面是一个示例代码,展示了如何使用Flyway的clean()方法:

import org.flywaydb.core.Flyway;
public class App {
    public static void main(String[] args) {
        // Create Flyway instance
        Flyway flyway = Flyway.configure().dataSource("jdbc:mysql://localhost:3306/mydb", "username", "password").load();
        // Clean the database
        flyway.clean();
        // Migrate the database
        flyway.migrate();
        // Other application logic
        // ...
    }
}

在这个示例中,我们首先创建了一个Flyway实例,并配置了数据库连接信息。然后,我们调用了clean()方法来清除数据库。最后,我们调用了migrate()方法来执行数据库迁移。在其他应用程序逻辑之前或之后,我们可以根据需要执行其他操作。

总之,通过调用Flyway的clean()方法,我们可以在应用程序启动时清除数据库,并重新创建表结构。这个方法确保了每次应用程序启动时,数据库都是干净的,并且表结构是最新的。这是一个非常有用的功能,可以帮助我们在开发和测试过程中保持数据库的一致性和可靠性。

0