A customer asked about how they could organize their migration scripts in different ways to manage them and worried about it being complex. I decided to test a few things. This post looks at using multiple folders for scripts.
Flyway is controlled by a number of options. These can be in a configuration file or they can be passed into the command line. I’m lazy, and I like things self-contained, so I tend to drop things into the flyway.conf file and specify this in the command line.
I’m also lazy about command lines, so I created a fw.cmd file with this in it:
flyway migrate -configFiles=”./flyway.conf”
Then I set up a few folders on my system. These were subfolders in a repo called SQL1, SQL2, SQL2. I know, I’m not creative. Here are the folders I set up. SQL1 has 3 scripts, each containing a CREATE TABLE statement. In this case, I am creating Table01, Table03, and Table04.
I do something similar in SQL2, with table Table02, Table10, and Table11.
SQL3 gets the 5th and 6th tables.
I did this to check order of operations, as well as using multiple folders. For reference, each file looks similar to this, with numbers changed:
I then edited my flyway.conf file. You can name this differently, you just need to pass the appropriate file to flyway when you execute it. By default, flyway.conf is looked for. I changed the variable for flyway.locations to be a comma separated list. In my case, I entered this:
flyway.locations=filesystem:sql1, filesystem:sql2, filesystem:sql3
Make sure you uncomment the # from the line.
Once this was done, I created an empty database, called foldertest. I then ran my fw command and saw this:
Success, with all my tables created.
Flyway is set up to search the locations path and load the files and execute them. You can organize your scripts into different subfolders if you want to, and flyway will sort out the ordering, if you’ve named them correctly.