7171import java .util .concurrent .atomic .AtomicBoolean ;
7272import java .util .concurrent .locks .Lock ;
7373import java .util .concurrent .locks .ReentrantLock ;
74+ import java .util .function .Consumer ;
7475import java .util .stream .Stream ;
7576
7677import static java .nio .file .StandardOpenOption .CREATE ;
@@ -115,14 +116,14 @@ public class EmbeddedPostgres implements Closeable
115116 PgBinaryResolver pgBinaryResolver , ProcessBuilder .Redirect errorRedirector , ProcessBuilder .Redirect outputRedirector ) throws IOException
116117 {
117118 this (parentDirectory , dataDirectory , cleanDataDirectory , postgresConfig , localeConfig , port , connectConfig ,
118- pgBinaryResolver , errorRedirector , outputRedirector , DEFAULT_PG_STARTUP_WAIT , null );
119+ pgBinaryResolver , errorRedirector , outputRedirector , DEFAULT_PG_STARTUP_WAIT , null , null );
119120 }
120121
121122 EmbeddedPostgres (File parentDirectory , File dataDirectory , boolean cleanDataDirectory ,
122123 Map <String , String > postgresConfig , Map <String , String > localeConfig , int port , Map <String , String > connectConfig ,
123124 PgBinaryResolver pgBinaryResolver , ProcessBuilder .Redirect errorRedirector ,
124125 ProcessBuilder .Redirect outputRedirector , Duration pgStartupWait ,
125- File overrideWorkingDirectory ) throws IOException
126+ File overrideWorkingDirectory , Consumer < File > dataDirectoryCustomizer ) throws IOException
126127 {
127128 this .cleanDataDirectory = cleanDataDirectory ;
128129 this .postgresConfig = new HashMap <>(postgresConfig );
@@ -159,9 +160,14 @@ public class EmbeddedPostgres implements Closeable
159160 }
160161
161162 lock ();
163+
164+ if (dataDirectoryCustomizer != null ) {
165+ dataDirectoryCustomizer .accept (dataDirectory );
166+ }
167+
162168 this .process = startPostmaster ();
163169 }
164-
170+
165171 public Process getProcess () {
166172 return this .process ;
167173 }
@@ -501,6 +507,7 @@ public static class Builder
501507 private final Map <String , String > connectConfig = new HashMap <>();
502508 private PgBinaryResolver pgBinaryResolver = DefaultPostgresBinaryResolver .INSTANCE ;
503509 private Duration pgStartupWait = DEFAULT_PG_STARTUP_WAIT ;
510+ private Consumer <File > dataDirectoryCustomizer ;
504511
505512 private ProcessBuilder .Redirect errRedirector = ProcessBuilder .Redirect .PIPE ;
506513 private ProcessBuilder .Redirect outRedirector = ProcessBuilder .Redirect .PIPE ;
@@ -579,6 +586,11 @@ public Builder setPgBinaryResolver(PgBinaryResolver pgBinaryResolver) {
579586 return this ;
580587 }
581588
589+ public Builder setDataDirectoryCustomizer (final Consumer <File > dataDirectoryCustomizer ) {
590+ this .dataDirectoryCustomizer = dataDirectoryCustomizer ;
591+ return this ;
592+ }
593+
582594 public EmbeddedPostgres start () throws IOException {
583595 if (builderPort == 0 )
584596 {
@@ -589,7 +601,7 @@ public EmbeddedPostgres start() throws IOException {
589601 }
590602 return new EmbeddedPostgres (parentDirectory , builderDataDirectory , builderCleanDataDirectory , config ,
591603 localeConfig , builderPort , connectConfig , pgBinaryResolver , errRedirector , outRedirector ,
592- pgStartupWait , overrideWorkingDirectory );
604+ pgStartupWait , overrideWorkingDirectory , dataDirectoryCustomizer );
593605 }
594606
595607 @ Override
@@ -611,7 +623,9 @@ public boolean equals(Object o) {
611623 Objects .equals (pgBinaryResolver , builder .pgBinaryResolver ) &&
612624 Objects .equals (pgStartupWait , builder .pgStartupWait ) &&
613625 Objects .equals (errRedirector , builder .errRedirector ) &&
614- Objects .equals (outRedirector , builder .outRedirector );
626+ Objects .equals (outRedirector , builder .outRedirector ) &&
627+ Objects .equals (dataDirectoryCustomizer != null ? dataDirectoryCustomizer .getClass () : null ,
628+ builder .dataDirectoryCustomizer != null ? builder .dataDirectoryCustomizer .getClass () : null );
615629 }
616630
617631 @ Override
0 commit comments