diff --git a/ebean-datasource-api/src/main/java/io/ebean/datasource/DSManager.java b/ebean-datasource-api/src/main/java/io/ebean/datasource/DSManager.java index 936c044..cbe359b 100644 --- a/ebean-datasource-api/src/main/java/io/ebean/datasource/DSManager.java +++ b/ebean-datasource-api/src/main/java/io/ebean/datasource/DSManager.java @@ -8,6 +8,7 @@ final class DSManager { private static final DataSourceFactory factory = init(); + private static final NewConnectionInitializer defaultInitializer = initConnectionInitializer(); private static DataSourceFactory init() { return ServiceLoader.load(DataSourceFactory.class) @@ -15,7 +16,17 @@ private static DataSourceFactory init() { .orElseThrow(() -> new IllegalStateException("No DataSourceFactory, add ebean-datasource to the classpath.")); } + private static NewConnectionInitializer initConnectionInitializer() { + return ServiceLoader.load(NewConnectionInitializer.class) + .findFirst() + .orElse(null); + } + static DataSourceFactory get() { return factory; } + + static NewConnectionInitializer defaultInitializer() { + return defaultInitializer; + } } diff --git a/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceBuilder.java b/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceBuilder.java index a508c6f..e7adc91 100644 --- a/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceBuilder.java +++ b/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceBuilder.java @@ -384,6 +384,11 @@ default DataSourceBuilder listener(DataSourcePoolListener listener) { */ DataSourceBuilder connectionInitializer(NewConnectionInitializer connectionListener); + /** + * Set the default connection initializer to use if not already set. + */ + DataSourceBuilder defaultConnectionInitializer(NewConnectionInitializer defaultInitializer); + /** * Set a SQL statement used to test the database is accessible. *

diff --git a/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceConfig.java b/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceConfig.java index 83068a0..bc7256a 100644 --- a/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceConfig.java +++ b/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceConfig.java @@ -489,6 +489,14 @@ public DataSourceBuilder connectionInitializer(NewConnectionInitializer connecti return this; } + @Override + public DataSourceBuilder defaultConnectionInitializer(NewConnectionInitializer defaultInitializer) { + if (connectionInitializer == null && defaultInitializer != null) { + connectionInitializer = defaultInitializer; + } + return this; + } + @Override public String getHeartbeatSql() { return heartbeatSql; diff --git a/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceFactory.java b/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceFactory.java index 075d6e4..6c61bd9 100644 --- a/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceFactory.java +++ b/ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceFactory.java @@ -22,6 +22,7 @@ public interface DataSourceFactory { * Create the DataSourcePool given the name and configuration. */ static DataSourcePool create(String name, DataSourceConfig config) { + config.defaultConnectionInitializer(DSManager.defaultInitializer()); return DSManager.get().createPool(name, config); } diff --git a/ebean-datasource-api/src/main/java/module-info.java b/ebean-datasource-api/src/main/java/module-info.java index ea59956..1087204 100644 --- a/ebean-datasource-api/src/main/java/module-info.java +++ b/ebean-datasource-api/src/main/java/module-info.java @@ -4,6 +4,7 @@ requires transitive io.avaje.applog; uses io.ebean.datasource.DataSourceFactory; + uses io.ebean.datasource.NewConnectionInitializer; exports io.ebean.datasource; }