使用 Neo4j 和 Spring 进行数据库迁移

Database migrations with Neo4j and Spring

我有这种示例项目HERE

在那个示例数据中,我尝试使用Flyway来实现与neo4j数据库的数据库迁移。我可以使用 H2 数据库创建和插入普通 SQL(我在我的示例项目中使用了 H2 数据库),但我不知道如何使用 Neo4j 图形数据库实现它。

我需要在应用程序启动时初始化数据。这就是我尝试设置迁移代码的方式:

public class V1_1__InitMaster implements SpringJdbcMigration  {
public void migrate(JdbcTemplate jdbcTemplate) throws Exception {
    /*
    //Example using h2 database
    jdbcTemplate.execute("CREATE TABLE Unit ("
            + "code VARCHAR(30),"
            + "name VARCHAR(30),"
            + "value DOUBLE"
            + ");");

    jdbcTemplate.execute("INSERT INTO Unit ('ft','Feet',1);");

    //How I can save my init data to neo4j database in here?
    for(String[] unitString : initDataMaster.unitList){
        //I got list unitList here
    }
    */
}
}

我阅读了这个 Page 关于可以使用 neo4j 管理数据库迁移的 flyway,并且我查看了一些解释 Flyway 与 Spring 和 Neo4j 集成的页面。

我问的是,如何保存我的初始化数据并使用 Flyway 管理它并与 Neo4j 和 Spring 集成?

编辑

引入了新的 Spring 引导启动器(仅适用于 Liquigraph 3.x)以完全与 Spring 引导一起使用,link最后仍然是现在的参考。

您所要做的就是使用启动器 liquigraph-spring-boot-starterspring-boot-starter-jdbc,启用自动配置(通过 @EnableAutoConfiguration)并声明提供至少 liquigraph.url application.properties).

初始答案

Liquigraph 专为使用 Neo4j 管理迁移而设计。 根据您要支持的 Neo4j 版本,您可以选择 Liquigraph 2.x(对于 Neo4j 2.x)或 Liquigraph 3.x(对于 Neo4j 3.x)。

与 Spring 的集成非常简单,您可以将 DataSource or a JDBC URI(和 user/password)传递给配置生成器并以编程方式触发迁移 运行。

文档对此进行了描述 here(并非特定于 Spring,这是以编程方式 运行 迁移的不可知方式)。

配置可能如下所示(前提是您定义了 DataSource 此配置 class 可访问的某个位置):

@Configuration
class MigrationConfiguration {

    @Bean
    public MethodInvokingFactoryBean liquigraph(org.liquigraph.core.configuration.Configuration liquigraphConfig) {
        MethodInvokingFactoryBean method = new MethodInvokingFactoryBean();
        method.setTargetObject(new Liquigraph());
        method.setTargetMethod("runMigrations");
        method.setArguments(new Object[] {liquigraphConfig});
        return method;
    }

    @Bean
    public org.liquigraph.core.configuration.Configuration configuration(DataSource dataSource) {
        return new ConfigurationBuilder()
            .withDataSource(dataSource)
            .withMasterChangelogLocation("changelog.xml")
            .withRunMode()
            .build();
    }
}

完整示例在这里:https://github.com/fbiville/liquigraph-spring-boot-example