Cuba 有类似 liquibase 的 loadData(fakedata)这个功能么

就是想加入一些初始数据(fake data),由于开发环境是hsqldb,生产环境是sql server,语法有细微差别,无法通用

现在对于每种数据库类型需要单独写初始化脚本。我们也有遇到你说的问题,比如开发环境是 hsql,部署环境是 mysql,我们的解决方式是初始化脚本以 hsql 为主,写了一个 gradle 任务,在发布的时候自动执行这个任务将 hsql版的脚本转换为 mysql 版的,做到初始化脚本只写一版。

嗯,也是个办法吧,如果今后能支持liquibase这种loadData功能就好了,谢谢。

这里有一个hsql 转 mysql 的Gralde 任务示例,供参考:

task createInit30ForMySql(group:"database") {
    doLast{
        def projectDir=project.projectDir.toString()
        def hsql30File = Paths.get(projectDir,"db/init/hsql/30.create-db.sql");
        def hsql311File = Paths.get(projectDir,"db/init/hsql/311.create-db.sql");
        def hsql312File = Paths.get(projectDir,"db/init/hsql/312.create-db.sql");
        def mysql30File = Paths.get(projectDir,"db/init/mysql/30.create-db.sql");
        def mysql311File = Paths.get(projectDir,"db/init/mysql/311.create-db.sql");
        def mysql312File = Paths.get(projectDir,"db/init/mysql/312.create-db.sql");
        def mapping=[
                [hsql30File,mysql30File],
                [hsql311File,mysql311File],
                [hsql312File,mysql312File]
        ];
        mapping.each {
            List<Path> files->
                File srcFile=files[0].toFile(),targetFile=files[1].toFile();
                String srcText=srcFile.getText("UTF-8");
                def targetText=srcText.replaceAll("([0-9a-f]{8}\\b)-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-(\\b[0-9a-f]{12})","\$1\$2\$3\$4\$5");
                targetFile.write(targetText,"UTF-8");
        }
    }
}
1 个赞

另外,也建议开发环境和运行环境的数据库一致,避免出现由于数据库特性不同导致的 bug 或性能问题。