@@ -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