List of usage examples for org.springframework.integration.file.support FileExistsMode APPEND_NO_FLUSH
FileExistsMode APPEND_NO_FLUSH
To view the source code for org.springframework.integration.file.support FileExistsMode APPEND_NO_FLUSH.
Click Source Link
From source file:org.springframework.integration.file.FileWritingMessageHandlerTests.java
@Test public void noFlushAppend() throws Exception { File tempFolder = this.temp.newFolder(); FileWritingMessageHandler handler = new FileWritingMessageHandler(tempFolder); handler.setFileExistsMode(FileExistsMode.APPEND_NO_FLUSH); handler.setFileNameGenerator(message -> "foo.txt"); ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.afterPropertiesSet();// w w w . j a v a2s .co m handler.setTaskScheduler(taskScheduler); handler.setOutputChannel(new NullChannel()); handler.setBeanFactory(mock(BeanFactory.class)); handler.setFlushInterval(30000); handler.afterPropertiesSet(); handler.start(); File file = new File(tempFolder, "foo.txt"); handler.handleMessage(new GenericMessage<String>("foo")); handler.handleMessage(new GenericMessage<String>("bar")); handler.handleMessage(new GenericMessage<String>("baz")); handler.handleMessage(new GenericMessage<byte[]>("qux".getBytes())); // change of payload type forces flush assertThat(file.length(), greaterThanOrEqualTo(9L)); handler.stop(); // forces flush assertThat(file.length(), equalTo(12L)); handler.setFlushInterval(100); handler.start(); handler.handleMessage(new GenericMessage<InputStream>(new ByteArrayInputStream("fiz".getBytes()))); int n = 0; while (n++ < 100 && file.length() < 15) { Thread.sleep(100); } assertThat(file.length(), equalTo(15L)); handler.handleMessage(new GenericMessage<InputStream>(new ByteArrayInputStream("buz".getBytes()))); handler.trigger(new GenericMessage<String>(Matcher.quoteReplacement(file.getAbsolutePath()))); assertThat(file.length(), equalTo(18L)); assertEquals(0, TestUtils.getPropertyValue(handler, "fileStates", Map.class).size()); handler.setFlushInterval(30000); final AtomicBoolean called = new AtomicBoolean(); handler.setFlushPredicate((fileAbsolutePath, firstWrite, lastWrite, triggerMessage) -> { called.set(true); return true; }); handler.handleMessage(new GenericMessage<InputStream>(new ByteArrayInputStream("box".getBytes()))); handler.trigger(new GenericMessage<String>("foo")); assertThat(file.length(), equalTo(21L)); assertTrue(called.get()); handler.handleMessage(new GenericMessage<InputStream>(new ByteArrayInputStream("bux".getBytes()))); called.set(false); handler.flushIfNeeded((fileAbsolutePath, firstWrite, lastWrite) -> { called.set(true); return true; }); assertThat(file.length(), equalTo(24L)); assertTrue(called.get()); handler.stop(); Log logger = spy(TestUtils.getPropertyValue(handler, "logger", Log.class)); new DirectFieldAccessor(handler).setPropertyValue("logger", logger); when(logger.isDebugEnabled()).thenReturn(true); final AtomicInteger flushes = new AtomicInteger(); doAnswer(i -> { flushes.incrementAndGet(); return null; }).when(logger).debug(startsWith("Flushed:")); handler.setFlushInterval(50); handler.setFlushWhenIdle(false); handler.start(); for (int i = 0; i < 40; i++) { handler.handleMessage(new GenericMessage<String>("foo")); Thread.sleep(5); } assertThat(flushes.get(), greaterThanOrEqualTo(2)); handler.stop(); }
From source file:org.springframework.integration.file.FileWritingMessageHandlerTests.java
@Test public void lockForFlush() throws Exception { File tempFolder = this.temp.newFolder(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); final BufferedOutputStream out = spy(new BufferedOutputStream(baos)); FileWritingMessageHandler handler = new FileWritingMessageHandler(tempFolder) { @Override//from w ww .j av a2s. c om protected BufferedOutputStream createOutputStream(File fileToWriteTo, boolean append) { return out; } }; handler.setFileExistsMode(FileExistsMode.APPEND_NO_FLUSH); handler.setFileNameGenerator(message -> "foo.txt"); ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.afterPropertiesSet(); handler.setTaskScheduler(taskScheduler); handler.setOutputChannel(new NullChannel()); handler.setBeanFactory(mock(BeanFactory.class)); handler.setFlushInterval(10); handler.setFlushWhenIdle(false); handler.afterPropertiesSet(); handler.start(); final AtomicBoolean writing = new AtomicBoolean(); final AtomicBoolean closeWhileWriting = new AtomicBoolean(); willAnswer(i -> { writing.set(true); Thread.sleep(500); writing.set(false); return null; }).given(out).write(any(byte[].class), anyInt(), anyInt()); willAnswer(i -> { closeWhileWriting.compareAndSet(false, writing.get()); return null; }).given(out).close(); handler.handleMessage(new GenericMessage<>("foo".getBytes())); verify(out).write(any(byte[].class), anyInt(), anyInt()); assertFalse(closeWhileWriting.get()); handler.stop(); }