Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/src/main/asciidoc/flyway.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ Also, you can customize the Flyway behaviour by using the following properties:
**true** to execute Flyway automatically when the application starts, **false** otherwise. +
**default:** false

`quarkus.flyway.clean-at-start`::
**true** to execute Flyway clean command automatically when the application starts, **false** otherwise. +
**default:** false

`quarkus.flyway.locations`::
Comma-separated list of locations to scan recursively for migrations. The location type is determined by its prefix.
Unprefixed locations or locations starting with classpath: point to a package on the classpath and may contain both SQL
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.quarkus.flyway.test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.inject.Inject;

import org.flywaydb.core.Flyway;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.agroal.api.AgroalDataSource;
import io.quarkus.test.QuarkusUnitTest;

public class FlywayExtensionCleanAndMigrateAtStartTest {
// Quarkus built object
@Inject
Flyway flyway;

@Inject
AgroalDataSource defaultDataSource;

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource("db/migration/V1.0.0__Quarkus.sql")
.addAsResource("clean-and-migrate-at-start-config.properties", "application.properties"));

@Test
@DisplayName("Clean and migrate at start correctly")
public void testFlywayConfigInjection() throws SQLException {

Connection connection = defaultDataSource.getConnection();

try (Statement stat = connection.createStatement()) {
try (ResultSet executeQuery = stat.executeQuery("select * from fake_existing_tbl")) {
assertFalse(executeQuery.next(), "Table exists but is not empty");
}
}
String currentVersion = flyway.info().current().getVersion().toString();
assertEquals("1.0.0", currentVersion, "Expected to be 1.0.0 as migration runs at start");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package io.quarkus.flyway.test;

import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.fail;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.inject.Inject;

import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.MigrationInfo;
import org.h2.jdbc.JdbcSQLException;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.agroal.api.AgroalDataSource;
import io.quarkus.test.QuarkusUnitTest;

public class FlywayExtensionCleanAtStartTest {
// Quarkus built object
@Inject
Flyway flyway;

@Inject
AgroalDataSource defaultDataSource;

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource("db/migration/V1.0.0__Quarkus.sql")
.addAsResource("clean-at-start-config.properties", "application.properties"));

@Test
@DisplayName("Clean at start correctly")
public void testFlywayConfigInjection() throws SQLException {

Connection connection = defaultDataSource.getConnection();

try (Statement stat = connection.createStatement()) {
try (ResultSet executeQuery = stat.executeQuery("select * from fake_existing_tbl")) {
fail("fake_existing_tbl should not exist");
} catch (JdbcSQLException e) {
// expected fake_existing_tbl does not exist
}
}
MigrationInfo current = flyway.info().current();
assertNull(current, "Info is not null");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
quarkus.datasource.url=jdbc:h2:tcp://localhost/mem:test-quarkus-clean-at-start;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM 'src/test/resources/h2-init-data.sql'
quarkus.datasource.driver=org.h2.Driver
quarkus.datasource.username=sa
quarkus.datasource.password=sa

# Flyway config properties
quarkus.flyway.clean-at-start=true
quarkus.flyway.migrate-at-start=true
quarkus.flyway.table=test_flyway_history
quarkus.flyway.baseline-on-migrate=true
quarkus.flyway.baseline-version=0.0.1
quarkus.flyway.baseline-description=Initial description for test
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
quarkus.datasource.url=jdbc:h2:tcp://localhost/mem:test-quarkus-clean-at-start;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM 'src/test/resources/h2-init-data.sql'
quarkus.datasource.driver=org.h2.Driver
quarkus.datasource.username=sa
quarkus.datasource.password=sa

# Flyway config properties
quarkus.flyway.clean-at-start=true
quarkus.flyway.migrate-at-start=false
quarkus.flyway.table=test_flyway_history
quarkus.flyway.baseline-on-migrate=true
quarkus.flyway.baseline-version=0.0.1
quarkus.flyway.baseline-description=Initial description for test
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ public void configureFlywayProperties(FlywayRuntimeConfig flywayRuntimeConfig, B
}

public void doStartActions(FlywayRuntimeConfig config, BeanContainer container) {
if (config.cleanAtStart) {
Flyway flyway = container.instance(Flyway.class);
flyway.clean();
}
if (config.migrateAtStart) {
Flyway flyway = container.instance(Flyway.class);
flyway.migrate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@ public final class FlywayRuntimeConfig {
@ConfigItem
public Optional<String> repeatableSqlMigrationPrefix;

/**
* true to execute Flyway clean command automatically when the application starts, false otherwise.
*
*/
@ConfigItem
public boolean cleanAtStart;

/**
* true to execute Flyway automatically when the application starts, false otherwise.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ public String doMigrateAuto() {
"Version is null! Migration was not applied");
return version.toString();
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line break necessary?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm using Quarkus Code Style and before Commit, I run "mvn clean install" comands to format the code corretly

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ public class FlywayFunctionalityTest {
public void testFlywayQuarkusFunctionality() {
when().get("/flyway/migrate").then().body(is("1.0.1"));
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line break necessary?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm using Quarkus Code Style and before Commit, I run "mvn clean install" comands to format the code corretly

}