Tolerate files being briefly left open by FileWritingMessageHandler

When the context is closed, FileWritingMessageHandler is stopped and
it closes its output files. However, it appears to do so in a manner
which means that they may be closed after the call to close the
context is completed. This causes problems on Windows as files that
are still open cannot be deleted.

This commit adds a workaround to SampleIntegrationApplicationTests
so that it makes up to 10 attempts each 0.5s apart to clean up the
input and output directories.
This commit is contained in:
Andy Wilkinson 2017-01-17 11:48:57 +00:00
parent 6cab03de0b
commit 3927dca3e0

View File

@ -50,9 +50,21 @@ public class SampleIntegrationApplicationTests {
private ConfigurableApplicationContext context;
@Before
public void deleteOutput() {
FileSystemUtils.deleteRecursively(new File("target/input"));
FileSystemUtils.deleteRecursively(new File("target/output"));
public void deleteInputAndOutput() throws InterruptedException {
deleteIfExists(new File("target/input"));
deleteIfExists(new File("target/output"));
}
private void deleteIfExists(File directory) throws InterruptedException {
if (directory.exists()) {
for (int i = 0; i < 10; i++) {
if (FileSystemUtils.deleteRecursively(directory)) {
return;
}
Thread.sleep(100);
}
throw new IllegalStateException("Failed to delete '" + directory + "'");
}
}
@After