1. 基础环境搭建
- 点击获取下载flyway的包(以6.4.2为例)
- windows: flyway-commandline-6.4.2-windows-x64.zip
- linux: flyway-commandline-6.4.2-linux-x64.tar.gz
- 解压包,所得的目录为flyway的安装目录
- 把flyway/6.4.2/patch目录里的lib目录拷贝到解压目录里进行覆盖,删除掉安装目录下的lib/community/flyway-core-6.4.2.jar包
- 删除lib/community/flyway-core-6.4.2.jar包原因有两个:
- 去除不支持MySQL5.6的限制,在org/flywaydb/core/internal/database/mysql/MySQLDatabase.java里的ensureSupported()方法,把版本比较由5.7改成5.6,从而去掉了只能使用MySQL5.7以上的数据库;
- flyway对版本的支持与实际需求有差距,需要对版本做了扩展
- lib下的其它jar包是为了在命令行情况下可以使用logback方式进行打印日志
- logback-classic-1.2.3.jar
- logback-core-1.2.3.jar
- slf4j-api-1.7.25.jar
- 删除lib/community/flyway-core-6.4.2.jar包原因有两个:
- 使执行命令时按logback方式打印日志
- 修改flyway或flyway.cmd文件,给java运行命令加上-Dlogback.configurationFile参数(在java命令执行前加下面行一行)
- windows: set JAVA_ARGS=%JAVA_ARGS% -Dlogback.configurationFile=xxx/logback.xml (其中xxx换成logback.xml所在的绝对路径,%JAVA_ARGS%后有个空格)
- linux: JAVA_ARGS="$JAVA_ARGS -Dlogback.configurationFile=xxx/logback.xml" (其中xxx换成logback.xml所在的绝对路径)
- 注:不加也可以,不加则会使用默认的日志,打印出的日志没有时间、也无法控制日志级别;
- 修改flyway或flyway.cmd文件,给java运行命令加上-Dlogback.configurationFile参数(在java命令执行前加下面行一行)
- 把命令加到环境变量中
- windows: 把安装目录加到环境变量Path中
- linux: 在home目录下的.bash_profile中把安装目录加到PATH变量中
- 若不加到环境变量,则执行命令时,需要使用绝对路径或者到安装目录下执行命令
2. flyway环境搭建
- 使用例子工程来了解flyway的使用;
- 下载git仓库:git@10.1.1.217:eh-engineering/flyway-migrate.git;
- 该仓库里的demo工程是例子工程,里面的结构:
- db目录
- db/jars: flyway支持使用java代码编写sql的执行,这些class需打成jar放到该目录下才能执行(命令行模式只支持用jar执行,不支持独立的class文件);
- db/sql: 放置用sql脚本编写的要执行的SQL;
- flyway.conf: flyway执行需要的配置文件,命令需要找得到该配置文件;
- logback.xml: 使用logback打印日志,该文件可以放到其它目录,但在flyway.cmd中配置的logback.configurationFile参数需要指向该文件;
- src目录:里面放置了使用java代码编写的SQL执行,在IDE中可以直接执行;
- tools目录: 里面提供了config-migrate脚本,通过该脚本会在db/sql里创建带格式的sql文件,节省手工创建的时间;
- pom.xml: maven工程需要的配置文件;
- db目录
- 修改db/flyway.conf
- 修改数据库配置,使之能够连上数据库;
- 其它配置项根据实际情况修改;
- 增加要migrate的脚本
- 把工程导入到IDE中,在com/everhomes/dbmigrate目录下编写要执行SQL的类,参考其中已有的例子;
- 在db/sql目录中加入要编写的脚本,参考其中已有的例子;
- 执行
- 在命令行中:flyway migrate -workingDirectory=xxx/demo/db -configFiles=flyway.conf
- 命令可以简化,请学习更详细的flyway知识再进行
- 在IDE中执行com.everhomes.dbmigrate.core.MigrateStartup类,其中Program arguments填migrate;
- 在命令行中:flyway migrate -workingDirectory=xxx/demo/db -configFiles=flyway.conf