From 43213ead058f8a648f6ce1a7d2edf54c28a54d47 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 9 Aug 2021 15:10:59 +1200 Subject: [PATCH] #2291 - ENH: Explicit option for fast-failing or not fast-failing (skipDataSourceCheck config option) --- .../java/io/ebean/config/DatabaseConfig.java | 17 +++++++++++++++++ .../server/core/DefaultContainer.java | 3 +++ .../io/ebean/config/DatabaseConfigTest.java | 5 +++++ 3 files changed, 25 insertions(+) diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java index d1f0346b5..873304c3a 100644 --- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java +++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java @@ -319,6 +319,8 @@ public class DatabaseConfig { */ private ExternalTransactionManager externalTransactionManager; + private boolean skipDataSourceCheck; + /** * The data source (if programmatically provided). */ @@ -1651,6 +1653,20 @@ public class DatabaseConfig { this.autoTuneConfig = autoTuneConfig; } + /** + * Return true if the startup DataSource check should be skipped. + */ + public boolean skipDataSourceCheck() { + return skipDataSourceCheck; + } + + /** + * Set to true to skip the startup DataSource check. + */ + public void setSkipDataSourceCheck(boolean skipDataSourceCheck) { + this.skipDataSourceCheck = skipDataSourceCheck; + } + /** * Return the DataSource. */ @@ -2932,6 +2948,7 @@ public class DatabaseConfig { jsonDate = p.getEnum(JsonConfig.Date.class, "jsonDate", jsonDate); jsonMutationDetection = p.getEnum(MutationDetection.class, "jsonMutationDetection", jsonMutationDetection); + skipDataSourceCheck = p.getBoolean("skipDataSourceCheck", skipDataSourceCheck); runMigration = p.getBoolean("migration.run", runMigration); ddlGenerate = p.getBoolean("ddl.generate", ddlGenerate); ddlRun = p.getBoolean("ddl.run", ddlRun); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java index cdefcc294..2c8bbfecc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java @@ -255,6 +255,9 @@ public class DefaultContainer implements SpiContainer { } throw new RuntimeException("DataSource not set?"); } + if (config.skipDataSourceCheck()) { + return true; + } try (Connection connection = config.getDataSource().getConnection()) { if (connection.getAutoCommit()) { logger.warn("DataSource [{}] has autoCommit defaulting to true!", config.getName()); diff --git a/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java b/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java index dd132a8e3..368bc9a8f 100644 --- a/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java +++ b/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java @@ -76,6 +76,7 @@ public class DatabaseConfigTest { props.setProperty("loadModuleInfo", "true"); props.setProperty("forUpdateNoKey", "true"); props.setProperty("defaultServer", "false"); + props.setProperty("skipDataSourceCheck", "true"); props.setProperty("queryPlan.enable", "true"); props.setProperty("queryPlan.thresholdMicros", "10000"); @@ -92,6 +93,7 @@ public class DatabaseConfigTest { assertTrue(config.isDbOffline()); assertTrue(config.isAutoReadOnlyDataSource()); assertTrue(config.isAutoLoadModuleInfo()); + assertTrue(config.skipDataSourceCheck()); assertTrue(config.isIdGeneratorAutomatic()); assertFalse(config.getPlatformConfig().isCaseSensitiveCollation()); @@ -155,6 +157,7 @@ public class DatabaseConfigTest { assertTrue(config.isIdGeneratorAutomatic()); assertTrue(config.isDefaultServer()); assertFalse(config.isAutoPersistUpdates()); + assertFalse(config.skipDataSourceCheck()); config.setIdGeneratorAutomatic(false); assertFalse(config.isIdGeneratorAutomatic()); @@ -175,6 +178,8 @@ public class DatabaseConfigTest { assertFalse(config.isAutoLoadModuleInfo()); config.setAutoPersistUpdates(true); assertTrue(config.isAutoPersistUpdates()); + config.setSkipDataSourceCheck(true); + assertTrue(config.skipDataSourceCheck()); } @Test