diff --git a/pom.xml b/pom.xml
index e26f44f9a..fc2ac19d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,7 +99,7 @@
io.ebean
ebean-datasource
- 4.7.3
+ 4.9.1
diff --git a/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
index b1ceb6a76..70f280765 100644
--- a/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
+++ b/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
@@ -62,10 +62,7 @@ class InitDataSource {
*/
private DataSource initReadOnlyDataSource() {
DataSourceConfig roConfig = readOnlyConfig();
- if (roConfig == null) {
- return null;
- }
- return createFromConfig(roConfig, true);
+ return roConfig == null ? null : createFromConfig(roConfig, true);
}
DataSourceConfig readOnlyConfig() {
@@ -74,20 +71,25 @@ class InitDataSource {
// it has explicitly been set to null, not expected but ok
return null;
}
- final String readOnlyUrl = roConfig.getUrl();
- if ("none".equalsIgnoreCase(readOnlyUrl) || notAutoReadOnly(readOnlyUrl)) {
- // no read-only DataSource will be used
+ if (urlSet(roConfig.getUrl())) {
+ return roConfig;
+ }
+ // convenient alternate place to set the read-only url
+ final String readOnlyUrl = config.getDataSourceConfig().getReadOnlyUrl();
+ if (urlSet(readOnlyUrl)) {
+ roConfig.setUrl(readOnlyUrl);
+ return roConfig;
+ }
+ if (config.isAutoReadOnlyDataSource()) {
+ roConfig.setUrl(null); // blank out in case it is "none"
+ return roConfig;
+ } else {
return null;
}
- return roConfig;
}
- private boolean notAutoReadOnly(String readOnlyUrl) {
- return isEmpty(readOnlyUrl) && !config.isAutoReadOnlyDataSource();
- }
-
- private boolean isEmpty(String url) {
- return url == null || url.trim().isEmpty();
+ private boolean urlSet(String url) {
+ return url != null && !"none".equalsIgnoreCase(url) && !url.trim().isEmpty();
}
private DataSource createFromConfig(DataSourceConfig dsConfig, boolean readOnly) {
@@ -107,7 +109,7 @@ class InitDataSource {
if (readOnly) {
// setup to use AutoCommit such that we skip explicit commit
dsConfig.setAutoCommit(true);
- //dsConfig.setReadOnly(true);
+ dsConfig.setReadOnly(true);
dsConfig.setDefaults(config.getDataSourceConfig());
dsConfig.setIsolationLevel(config.getDataSourceConfig().getIsolationLevel());
}
diff --git a/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java b/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java
index 288833cd9..5065d17e5 100644
--- a/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java
+++ b/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java
@@ -52,6 +52,15 @@ public class InitDataSourceTest {
assertNotNull(new InitDataSource(config).readOnlyConfig());
}
+ @Test
+ public void readOnlyConfig_when_autoReadOnlyDataSource_expect_setToNull() {
+ ServerConfig config = newConfig("none");
+ config.setAutoReadOnlyDataSource(true);
+
+ final DataSourceConfig readOnlyConfig = new InitDataSource(config).readOnlyConfig();
+ assertNull(readOnlyConfig.getUrl());
+ }
+
@Test
public void readOnlyConfig_when_urlSet() {
ServerConfig config = newConfig("foo");
@@ -61,6 +70,48 @@ public class InitDataSourceTest {
assertEquals("foo", roConfig.getUrl());
}
+ @Test
+ public void readOnlyConfig_when_readOnlyUrlSetOnMain() {
+ ServerConfig config = newConfig(null);
+ // alternate location to set read-only url for developer convenience
+ config.getDataSourceConfig().setReadOnlyUrl("bar");
+
+ final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
+ assertNotNull(roConfig);
+ assertEquals("bar", roConfig.getUrl());
+ }
+
+ @Test
+ public void readOnlyConfig_when_readOnlyUrlSetOnMain_withNone() {
+ ServerConfig config = newConfig("None");
+ // alternate location to set read-only url for developer convenience
+ config.getDataSourceConfig().setReadOnlyUrl("bar");
+
+ final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
+ assertNotNull(roConfig);
+ assertEquals("bar", roConfig.getUrl());
+ }
+
+ @Test
+ public void readOnlyConfig_when_bothReadOnlyUrlsSet() {
+ ServerConfig config = newConfig("one");
+ config.getDataSourceConfig().setReadOnlyUrl("two");
+
+ final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
+ assertNotNull(roConfig);
+ assertEquals("one", roConfig.getUrl());
+ }
+
+ @Test
+ public void readOnlyConfig_when_readOnlyUrlSetOnMain_withNoneNone() {
+ ServerConfig config = newConfig("none");
+ // alternate location to set read-only url for developer convenience
+ config.getDataSourceConfig().setReadOnlyUrl("none");
+
+ final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
+ assertNull(roConfig);
+ }
+
@Test
public void readOnlyConfig_when_urlSet_2() {
ServerConfig config = new ServerConfig();