We're going to create our project using the Maven Archetype Plugin by issuing the following command:
> mvn archetype:generate -B ^
-DarchetypeGroupId=org.apache.maven.archetypes ^
-DarchetypeArtifactId=maven-archetype-quickstart ^
-DarchetypeVersion=1.1 ^
-DgroupId=foo ^
-DartifactId=bar ^
-Dversion=1.0-SNAPSHOT ^
-Dpackage=foobar
We are now ready to get started. Let's jump into our project:
> cd bar
Let's add Flyway and H2 to our new pom.xml:
<project ...>
...
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.170</version>
</dependency>
...
</dependencies>
...
</project>
Now it's time to integrate Flyway into src/main/java/foobar/App.java and point it to our database:
package foobar;
import org.flywaydb.core.Flyway;
public class App {
public static void main(String[] args) {
// Create the Flyway instance
Flyway flyway = new Flyway();
// Point it to the database
flyway.setDataSource("jdbc:h2:file:./target/foobar", "sa", null);
// Start the migration
flyway.migrate();
}
}
We create the migration directory src/main/resources/db/migration.
Followed by a first migration called src/main/resources/db/migration/V1__Create_person_table.sql:
create table PERSON (
ID int not null,
NAME varchar(100) not null
);
It's now time to execute our program by issuing this command:
bar> mvn package exec:java -Dexec.mainClass=foobar.App
If all went well, you should see the following output (timestamps omitted):
INFO: Creating Metadata table: "PUBLIC"."schema_version" INFO: Current version of schema "PUBLIC": << Empty Schema >> INFO: Migrating schema "PUBLIC" to version 1 - Create person table INFO: Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.062s).
If we now add a second migration called src/main/resources/db/migration/V2__Add_people.sql:
insert into PERSON (ID, NAME) values (1, 'Axel'); insert into PERSON (ID, NAME) values (2, 'Mr. Foo'); insert into PERSON (ID, NAME) values (3, 'Ms. Bar');
and execute it by issuing:
bar> mvn package exec:java -Dexec.mainClass=foobar.App
We now get:
INFO: Current version of schema "PUBLIC": 1 INFO: Migrating schema "PUBLIC" to version 2 - Add people INFO: Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.090s).
In this brief tutorial we saw how to
These migrations were then successfully found and executed.