Fix to return DataSourceBuilder.Settings for getDataSourceConfig() and getReadOnlyDataSourceConfig()

That is, existing code using DataSourceConfig has access to the getter
methods of DataSourceConfig. The DataSourceBuilder interface only has
the setter methods and DataSourceBuilder.Settings has both getters and
setter methods.

That is, the refactor to extract the DataSourceBuilder interface also
split off the getter methods to the DataSourceBuilder.Settings interface
(because most of the time when using the builder we only need the
setter methods and effectively hiding the getter methods behind the settings()
is useful to simplify the API for users).
This commit is contained in:
Rob Bygrave
2023-11-06 12:14:27 +13:00
parent bcf7bd17be
commit 5b0a3607f6
7 changed files with 53 additions and 25 deletions
@@ -20,10 +20,16 @@ import jakarta.persistence.EnumType;
import javax.sql.DataSource;
import java.time.Clock;
import java.util.*;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* Build a Database instance.
* <p>
* Note that {@link #settings()} provides access to read the builder configuration
* (the getters). The DatabaseBuilder only has the methods to set builder configuration
* (the setters) so use {@link #settings()} to access to everything.
*
* <pre>{@code
*
@@ -64,6 +70,23 @@ public interface DatabaseBuilder {
*/
Settings settings();
/**
* Apply configuration to this builder using a lambda.
*/
DatabaseBuilder apply(Consumer<DatabaseBuilder.Settings> applyConfiguration);
/**
* Conditionally apply configuration to this builder via a lambda.
*
* @param predicate The condition to apply configuration when true.
* @param apply The configuration to apply to this builder.
*/
default DatabaseBuilder alsoIf(BooleanSupplier predicate, Consumer<DatabaseBuilder.Settings> apply) {
if (predicate.getAsBoolean()) {
apply(apply);
}
return this;
}
/**
* Set the name of the Database.
*/
@@ -2598,7 +2621,7 @@ public interface DatabaseBuilder {
* Return the configuration to build a DataSource using Ebean's own DataSource
* implementation.
*/
DataSourceBuilder getDataSourceConfig();
DataSourceBuilder.Settings getDataSourceConfig();
/**
* Return true if Ebean should create a DataSource for use with implicit read only transactions.
@@ -2614,7 +2637,7 @@ public interface DatabaseBuilder {
* set on this configuration. This means there is actually no need to set any configuration here and we only
* set configuration for url, username and password etc if it is different from the main DataSource.
*/
DataSourceBuilder getReadOnlyDataSourceConfig();
DataSourceBuilder.Settings getReadOnlyDataSourceConfig();
/**
* Return a value used to represent TRUE in the database.
@@ -27,6 +27,7 @@ import java.time.Clock;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
/**
@@ -316,7 +317,7 @@ public class DatabaseConfig implements DatabaseBuilder.Settings {
/**
* The data source config.
*/
private DataSourceBuilder dataSourceConfig = DataSourceBuilder.create();
private DataSourceBuilder.Settings dataSourceConfig = DataSourceBuilder.create().settings();
/**
* When true create a read only DataSource using readOnlyDataSourceConfig defaulting values from dataSourceConfig.
@@ -329,7 +330,7 @@ public class DatabaseConfig implements DatabaseBuilder.Settings {
/**
* Optional configuration for a read only data source.
*/
private DataSourceBuilder readOnlyDataSourceConfig = DataSourceBuilder.create();
private DataSourceBuilder.Settings readOnlyDataSourceConfig = DataSourceBuilder.create().settings();
/**
* Optional - the database schema that should be used to own the tables etc.
@@ -560,6 +561,12 @@ public class DatabaseConfig implements DatabaseBuilder.Settings {
return this;
}
@Override
public DatabaseBuilder apply(Consumer<DatabaseBuilder.Settings> applyConfiguration) {
applyConfiguration.accept(this);
return this;
}
@Override
public Clock getClock() {
return clock;
@@ -1359,13 +1366,13 @@ public class DatabaseConfig implements DatabaseBuilder.Settings {
}
@Override
public DataSourceBuilder getDataSourceConfig() {
public DataSourceBuilder.Settings getDataSourceConfig() {
return dataSourceConfig;
}
@Override
public DatabaseConfig setDataSourceConfig(DataSourceBuilder dataSourceConfig) {
this.dataSourceConfig = dataSourceConfig;
this.dataSourceConfig = dataSourceConfig.settings();
return this;
}
@@ -1381,13 +1388,13 @@ public class DatabaseConfig implements DatabaseBuilder.Settings {
}
@Override
public DataSourceBuilder getReadOnlyDataSourceConfig() {
public DataSourceBuilder.Settings getReadOnlyDataSourceConfig() {
return readOnlyDataSourceConfig;
}
@Override
public DatabaseConfig setReadOnlyDataSourceConfig(DataSourceBuilder readOnlyDataSourceConfig) {
this.readOnlyDataSourceConfig = readOnlyDataSourceConfig;
public DatabaseConfig setReadOnlyDataSourceConfig(DataSourceBuilder readOnly) {
this.readOnlyDataSourceConfig = readOnly == null ? null : readOnly.settings();
return this;
}
@@ -2098,7 +2105,7 @@ public class DatabaseConfig implements DatabaseBuilder.Settings {
loadAutoTuneSettings(p);
if (dataSourceConfig == null) {
dataSourceConfig = DataSourceBuilder.create();
dataSourceConfig = DataSourceBuilder.create().settings();
}
loadDataSourceSettings(p);