diff --git a/play-ebean/src/main/java/play/db/ebean/EbeanDynamicEvolutions.java b/play-ebean/src/main/java/play/db/ebean/EbeanDynamicEvolutions.java index 0ec685c9..6852d668 100644 --- a/play-ebean/src/main/java/play/db/ebean/EbeanDynamicEvolutions.java +++ b/play-ebean/src/main/java/play/db/ebean/EbeanDynamicEvolutions.java @@ -16,11 +16,13 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; import play.Environment; import play.api.db.evolutions.DynamicEvolutions; import play.api.db.evolutions.Evolutions$; import play.api.db.evolutions.EvolutionsConfig; import play.inject.ApplicationLifecycle; +import play.inject.Injector; /** A Play module that automatically manages Ebean configuration. */ @Singleton @@ -29,16 +31,34 @@ public class EbeanDynamicEvolutions extends DynamicEvolutions { private final EbeanConfig config; private final Environment environment; - private final EvolutionsConfig evolutionsConfig; + private final Supplier evolutionsConfig; private final Map databases = new HashMap<>(); - @Inject public EbeanDynamicEvolutions( EbeanConfig config, Environment environment, ApplicationLifecycle lifecycle, EvolutionsConfig evolutionsConfig) { + this(config, environment, lifecycle, () -> evolutionsConfig); + } + + @Inject + public EbeanDynamicEvolutions( + EbeanConfig config, + Environment environment, + ApplicationLifecycle lifecycle, + Injector injector) { + // Only needed (and bound) when Play's EvolutionsModule, which is optional, generates the + // scripts + this(config, environment, lifecycle, () -> injector.instanceOf(EvolutionsConfig.class)); + } + + private EbeanDynamicEvolutions( + EbeanConfig config, + Environment environment, + ApplicationLifecycle lifecycle, + Supplier evolutionsConfig) { this.config = config; this.environment = environment; this.evolutionsConfig = evolutionsConfig; @@ -61,6 +81,7 @@ public void create() { if (environment.isProd()) { return; } + EvolutionsConfig evolutionsConfig = this.evolutionsConfig.get(); config .serverConfigs() .forEach( diff --git a/play-ebean/src/test/java/play/db/ebean/EbeanWithoutEvolutionsModuleTest.java b/play-ebean/src/test/java/play/db/ebean/EbeanWithoutEvolutionsModuleTest.java new file mode 100644 index 00000000..f0f28724 --- /dev/null +++ b/play-ebean/src/test/java/play/db/ebean/EbeanWithoutEvolutionsModuleTest.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) from 2022 The Play Framework Contributors , 2011-2021 Lightbend Inc. + */ + +package play.db.ebean; + +import static org.junit.Assert.assertEquals; + +import io.ebean.DB; +import java.util.List; +import java.util.Map; +import org.junit.Test; +import play.Application; +import play.api.db.evolutions.EvolutionsModule; +import play.inject.guice.GuiceApplicationBuilder; +import play.test.Helpers; + +public class EbeanWithoutEvolutionsModuleTest { + + @Test + public void startsWithoutPlaysEvolutionsModule() { + Application app = + new GuiceApplicationBuilder() + .disable(EvolutionsModule.class) + .configure( + Map.of( + "db.default.driver", "org.h2.Driver", + "db.default.url", "jdbc:h2:mem:play-ebean-without-evolutions", + "ebean.default", List.of("play.db.ebean.models.first.*"))) + .build(); + Helpers.running(app, () -> assertEquals("default", DB.getDefault().name())); + } +}