Skip to content

Commit 530712d

Browse files
# Ebean 3420
Create EbeanLifecycle component to manage Ebean shutdown
1 parent 75eba32 commit 530712d

File tree

4 files changed

+34
-14
lines changed

4 files changed

+34
-14
lines changed

play-ebean/src/main/java/play/db/ebean/EBeanComponents.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,17 @@
1414
public interface EBeanComponents extends ConfigurationComponents, DBComponents {
1515

1616
default DynamicEvolutions dynamicEvolutions() {
17-
return new EbeanDynamicEvolutions(
18-
ebeanConfig(), environment(), applicationLifecycle(), evolutionsConfig());
17+
return new EbeanDynamicEvolutions(ebeanConfig(), environment(), evolutionsConfig());
1918
}
2019

2120
default EbeanConfig ebeanConfig() {
2221
return new DefaultEbeanConfig.EbeanConfigParser(config(), environment(), dbApi()).get();
2322
}
2423

24+
default EbeanLifecycle ebeanLifecycle() {
25+
return new EbeanLifecycle(applicationLifecycle());
26+
}
27+
2528
default EvolutionsConfig evolutionsConfig() {
2629
return new DefaultEvolutionsConfigParser(configuration()).parse();
2730
}

play-ebean/src/main/java/play/db/ebean/EbeanDynamicEvolutions.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414
import java.nio.file.Files;
1515
import java.util.HashMap;
1616
import java.util.Map;
17-
import java.util.concurrent.CompletableFuture;
1817
import javax.inject.Inject;
1918
import javax.inject.Singleton;
2019
import play.Environment;
2120
import play.api.db.evolutions.DynamicEvolutions;
2221
import play.api.db.evolutions.Evolutions$;
2322
import play.api.db.evolutions.EvolutionsConfig;
24-
import play.inject.ApplicationLifecycle;
2523

2624
/** A Play module that automatically manages Ebean configuration. */
2725
@Singleton
@@ -36,19 +34,11 @@ public class EbeanDynamicEvolutions extends DynamicEvolutions {
3634

3735
@Inject
3836
public EbeanDynamicEvolutions(
39-
EbeanConfig config,
40-
Environment environment,
41-
ApplicationLifecycle lifecycle,
42-
EvolutionsConfig evolutionsConfig) {
37+
EbeanConfig config, Environment environment, EvolutionsConfig evolutionsConfig) {
4338
this.config = config;
4439
this.environment = environment;
4540
this.evolutionsConfig = evolutionsConfig;
4641
start();
47-
lifecycle.addStopHook(
48-
() -> {
49-
databases.forEach((key, database) -> database.shutdown(false, false));
50-
return CompletableFuture.completedFuture(null);
51-
});
5242
}
5343

5444
/** Initialise the Ebean servers/databases. */
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (C) from 2022 The Play Framework Contributors <https://github.com/playframework>, 2011-2021 Lightbend Inc. <https://www.lightbend.com>
3+
*/
4+
5+
package play.db.ebean;
6+
7+
import io.ebean.event.ShutdownManager;
8+
import java.util.concurrent.CompletableFuture;
9+
import javax.inject.Inject;
10+
import javax.inject.Singleton;
11+
import play.api.db.evolutions.DynamicEvolutions;
12+
import play.inject.ApplicationLifecycle;
13+
14+
/** A Play module that automatically manages Ebean configuration. */
15+
@Singleton
16+
public class EbeanLifecycle extends DynamicEvolutions {
17+
@Inject
18+
public EbeanLifecycle(ApplicationLifecycle lifecycle) {
19+
ShutdownManager.deregisterShutdownHook();
20+
lifecycle.addStopHook(
21+
() -> {
22+
ShutdownManager.shutdown();
23+
return CompletableFuture.completedFuture(null);
24+
});
25+
}
26+
}

play-ebean/src/main/java/play/db/ebean/EbeanModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class EbeanModule extends Module {
1818
public Seq<Binding<?>> bindings(Environment environment, Configuration configuration) {
1919
return seq(
2020
bind(DynamicEvolutions.class).to(EbeanDynamicEvolutions.class).eagerly(),
21-
bind(EbeanConfig.class).toProvider(DefaultEbeanConfig.EbeanConfigParser.class).eagerly());
21+
bind(EbeanConfig.class).toProvider(DefaultEbeanConfig.EbeanConfigParser.class).eagerly(),
22+
bind(EbeanLifecycle.class).toSelf().eagerly());
2223
}
2324
}

0 commit comments

Comments
 (0)