就是想加入一些初始数据(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 或性能问题。