diff --git a/src/main/java/io/ebean/dbmigration/DbMigration.java b/src/main/java/io/ebean/dbmigration/DbMigration.java
index 2d9018806..7880945f9 100644
--- a/src/main/java/io/ebean/dbmigration/DbMigration.java
+++ b/src/main/java/io/ebean/dbmigration/DbMigration.java
@@ -50,6 +50,11 @@ public interface DbMigration {
throw new IllegalStateException("No service implementation found for DbMigration?");
}
+ /**
+ * Set to false to suppress logging to System out.
+ */
+ void setLogToSystemOut(boolean logToSystemOut);
+
/**
* Set the path from the current working directory to the application resources.
*
diff --git a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index bf92237dc..6c40cd09b 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -72,6 +72,8 @@ public class DefaultDbMigration implements DbMigration {
private static final String GENERATED_COMMENT = "THIS IS A GENERATED FILE - DO NOT MODIFY";
+ private boolean logToSystemOut = true;
+
/**
* Set to true if DefaultDbMigration run with online EbeanServer instance.
*/
@@ -316,6 +318,11 @@ public class DefaultDbMigration implements DbMigration {
return generateDiff(request);
}
+ } catch (UnknownResourcePathException e) {
+ logError("ERROR - " + e.getMessage());
+ logError("Check the working directory or change dbMigration.setPathToResources() value?");
+ return null;
+
} finally {
if (!online) {
DbOffline.reset();
@@ -387,8 +394,7 @@ public class DefaultDbMigration implements DbMigration {
private void writeExtraDdl(File migrationDir, DdlScript script) throws IOException {
String fullName = repeatableMigrationName(script.isInit(), script.getName());
-
- logger.info("writing repeatable script {}", fullName);
+ logger.debug("writing repeatable script {}", fullName);
File file = new File(migrationDir, fullName);
try (FileWriter writer = new FileWriter(file)) {
@@ -397,6 +403,30 @@ public class DefaultDbMigration implements DbMigration {
}
}
+ @Override
+ public void setLogToSystemOut(boolean logToSystemOut) {
+ this.logToSystemOut = logToSystemOut;
+ }
+
+ private void logError(String message) {
+ if (logToSystemOut) {
+ System.out.println("DbMigration> " + message);
+ } else {
+ logger.error(message);
+ }
+ }
+
+ private void logInfo(String message, Object value) {
+ if (value != null) {
+ message = String.format(message, value);
+ }
+ if (logToSystemOut) {
+ System.out.println("DbMigration> " + message);
+ } else {
+ logger.info(message);
+ }
+ }
+
private String repeatableMigrationName(boolean init, String scriptName) {
StringBuilder sb = new StringBuilder();
if (init) {
@@ -416,12 +446,12 @@ public class DefaultDbMigration implements DbMigration {
List pendingDrops = request.getPendingDrops();
if (!pendingDrops.isEmpty()) {
- logger.info("Pending un-applied drops in versions {}", pendingDrops);
+ logInfo("Pending un-applied drops in versions %s", pendingDrops);
}
Migration migration = request.createDiffMigration();
if (migration == null) {
- logger.info("no changes detected - no migration written");
+ logInfo("no changes detected - no migration written", null);
return null;
} else {
// there were actually changes to write
@@ -440,7 +470,7 @@ public class DefaultDbMigration implements DbMigration {
List pendingDrops = request.getPendingDrops();
if (!pendingDrops.isEmpty()) {
- logger.info("... remaining pending un-applied drops in versions {}", pendingDrops);
+ logInfo("... remaining pending un-applied drops in versions %s", pendingDrops);
}
return version;
}
@@ -520,9 +550,9 @@ public class DefaultDbMigration implements DbMigration {
String fullVersion = getFullVersion(request.nextVersion(), dropsFor);
- logger.info("generating migration:{}", fullVersion);
+ logInfo("generating migration:%s", fullVersion);
if (!request.dbinitMigration && !writeMigrationXml(dbMigration, request.modelDir, fullVersion)) {
- logger.warn("migration already exists, not generating DDL");
+ logError("migration already exists, not generating DDL");
return null;
} else {
if (!platforms.isEmpty()) {
@@ -627,7 +657,6 @@ public class DefaultDbMigration implements DbMigration {
if (vanillaPlatform || databasePlatform == null) {
// not explicitly set so use the platform of the server
databasePlatform = server.getDatabasePlatform();
- logger.trace("set platform to {}", databasePlatform.getName());
}
if (migrationConfig != null) {
if (strictMode != null) {
@@ -713,13 +742,17 @@ public class DefaultDbMigration implements DbMigration {
// path to src/main/resources in typical maven project
File resourceRootDir = new File(pathToResources);
+ if (!resourceRootDir.exists()) {
+ String msg = String.format("Error - path to resources %s does not exist. Absolute path is %s", pathToResources, resourceRootDir.getAbsolutePath());
+ throw new UnknownResourcePathException(msg);
+ }
String resourcePath = migrationConfig.getMigrationPath(dbinitMigration);
// expect to be a path to something like - src/main/resources/dbmigration/model
File path = new File(resourceRootDir, resourcePath);
if (!path.exists()) {
if (!path.mkdirs()) {
- logger.debug("Unable to ensure migration directory exists at {}", path.getAbsolutePath());
+ logInfo("Warning - Unable to ensure migration directory exists at %s", path.getAbsolutePath());
}
}
return path;
@@ -735,7 +768,7 @@ public class DefaultDbMigration implements DbMigration {
}
File modelDir = new File(migrationDirectory, migrationConfig.getModelPath());
if (!modelDir.exists() && !modelDir.mkdirs()) {
- logger.debug("Unable to ensure migration model directory exists at {}", modelDir.getAbsolutePath());
+ logInfo("Warning - Unable to ensure migration model directory exists at %s", modelDir.getAbsolutePath());
}
return modelDir;
}
diff --git a/src/main/java/io/ebeaninternal/dbmigration/UnknownResourcePathException.java b/src/main/java/io/ebeaninternal/dbmigration/UnknownResourcePathException.java
new file mode 100644
index 000000000..9ecfde157
--- /dev/null
+++ b/src/main/java/io/ebeaninternal/dbmigration/UnknownResourcePathException.java
@@ -0,0 +1,14 @@
+package io.ebeaninternal.dbmigration;
+
+/**
+ * Exception when db migration resource path does not exist.
+ *
+ * Typically the working directory or pathToResources is incorrect.
+ *
+ */
+public class UnknownResourcePathException extends RuntimeException {
+
+ public UnknownResourcePathException(String msg) {
+ super(msg);
+ }
+}