Skip to content

Commit 2d0c3be

Browse files
authored
Merge pull request #170 from JelmerBouma1985/feature/control-register-shutdown-hook
Control registering of shutdownhook
2 parents 2e36550 + 4e4d502 commit 2d0c3be

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/main/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgres.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,26 +106,28 @@ public class EmbeddedPostgres implements Closeable
106106
private volatile FileOutputStream lockStream;
107107
private volatile FileLock lock;
108108
private final boolean cleanDataDirectory;
109+
private final boolean registerShutdownHook;
109110

110111
private final ProcessBuilder.Redirect errorRedirector;
111112
private final ProcessBuilder.Redirect outputRedirector;
112113
private final Process process;
113114

114-
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory,
115+
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory, boolean registerShutdownHook,
115116
Map<String, String> postgresConfig, Map<String, String> localeConfig, int port, Map<String, String> connectConfig,
116117
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector, ProcessBuilder.Redirect outputRedirector) throws IOException
117118
{
118-
this(parentDirectory, dataDirectory, cleanDataDirectory, postgresConfig, localeConfig, port, connectConfig,
119+
this(parentDirectory, dataDirectory, cleanDataDirectory, registerShutdownHook, postgresConfig, localeConfig, port, connectConfig,
119120
pgBinaryResolver, errorRedirector, outputRedirector, DEFAULT_PG_STARTUP_WAIT, null, null);
120121
}
121122

122-
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory,
123+
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory, boolean registerShutdownHook,
123124
Map<String, String> postgresConfig, Map<String, String> localeConfig, int port, Map<String, String> connectConfig,
124125
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector,
125126
ProcessBuilder.Redirect outputRedirector, Duration pgStartupWait,
126127
File overrideWorkingDirectory, Consumer<File> dataDirectoryCustomizer) throws IOException
127128
{
128129
this.cleanDataDirectory = cleanDataDirectory;
130+
this.registerShutdownHook = registerShutdownHook;
129131
this.postgresConfig = new HashMap<>(postgresConfig);
130132
this.localeConfig = new HashMap<>(localeConfig);
131133
this.connectConfig = new HashMap<>(connectConfig);
@@ -291,7 +293,9 @@ private Process startPostmaster() throws IOException
291293

292294
LOG.info("{} postmaster started as {} on port {}. Waiting up to {} for server startup to finish.", instanceId, postmaster.toString(), port, pgStartupWait);
293295

294-
Runtime.getRuntime().addShutdownHook(newCloserThread());
296+
if (registerShutdownHook) {
297+
Runtime.getRuntime().addShutdownHook(newCloserThread());
298+
}
295299

296300
waitForServerStartup(watch);
297301
return postmaster;
@@ -503,6 +507,7 @@ public static class Builder
503507
private final Map<String, String> config = new HashMap<>();
504508
private final Map<String, String> localeConfig = new HashMap<>();
505509
private boolean builderCleanDataDirectory = true;
510+
private boolean builderRegisterShutdownHook = true;
506511
private int builderPort = 0;
507512
private final Map<String, String> connectConfig = new HashMap<>();
508513
private PgBinaryResolver pgBinaryResolver = DefaultPostgresBinaryResolver.INSTANCE;
@@ -532,6 +537,11 @@ public Builder setCleanDataDirectory(boolean cleanDataDirectory) {
532537
return this;
533538
}
534539

540+
public Builder setRegisterShutdownHook(boolean registerShutdownHook) {
541+
builderRegisterShutdownHook = registerShutdownHook;
542+
return this;
543+
}
544+
535545
public Builder setDataDirectory(Path path) {
536546
return setDataDirectory(path.toFile());
537547
}
@@ -599,8 +609,8 @@ public EmbeddedPostgres start() throws IOException {
599609
if (builderDataDirectory == null) {
600610
builderDataDirectory = Files.createTempDirectory("epg").toFile();
601611
}
602-
return new EmbeddedPostgres(parentDirectory, builderDataDirectory, builderCleanDataDirectory, config,
603-
localeConfig, builderPort, connectConfig, pgBinaryResolver, errRedirector, outRedirector,
612+
return new EmbeddedPostgres(parentDirectory, builderDataDirectory, builderCleanDataDirectory, builderRegisterShutdownHook,
613+
config, localeConfig, builderPort, connectConfig, pgBinaryResolver, errRedirector, outRedirector,
604614
pgStartupWait, overrideWorkingDirectory, dataDirectoryCustomizer);
605615
}
606616

@@ -614,6 +624,7 @@ public boolean equals(Object o) {
614624
}
615625
Builder builder = (Builder) o;
616626
return builderCleanDataDirectory == builder.builderCleanDataDirectory &&
627+
builderRegisterShutdownHook == builder.builderRegisterShutdownHook &&
617628
builderPort == builder.builderPort &&
618629
Objects.equals(parentDirectory, builder.parentDirectory) &&
619630
Objects.equals(builderDataDirectory, builder.builderDataDirectory) &&
@@ -630,7 +641,7 @@ public boolean equals(Object o) {
630641

631642
@Override
632643
public int hashCode() {
633-
return Objects.hash(parentDirectory, builderDataDirectory, config, localeConfig, builderCleanDataDirectory, builderPort, connectConfig, pgBinaryResolver, pgStartupWait, errRedirector, outRedirector);
644+
return Objects.hash(parentDirectory, builderDataDirectory, config, localeConfig, builderCleanDataDirectory, builderRegisterShutdownHook, builderPort, connectConfig, pgBinaryResolver, pgStartupWait, errRedirector, outRedirector);
634645
}
635646
}
636647

0 commit comments

Comments
 (0)