/** * Builds the {@link MultiResourceItemWriter}. * * @return a {@link MultiResourceItemWriter} */ public MultiResourceItemWriter<T> build() { Assert.notNull(this.resource, "resource is required."); Assert.notNull(this.delegate, "delegate is required."); if(this.saveState) { org.springframework.util.Assert.hasText(this.name, "A name is required when saveState is true."); } MultiResourceItemWriter<T> writer = new MultiResourceItemWriter<>(); writer.setResource(this.resource); writer.setDelegate(this.delegate); writer.setItemCountLimitPerResource(this.itemCountLimitPerResource); if(this.suffixCreator != null) { writer.setResourceSuffixCreator(this.suffixCreator); } writer.setSaveState(this.saveState); writer.setName(this.name); return writer; }
@Override public void open(ExecutionContext executionContext) throws ItemStreamException { super.open(executionContext); resourceIndex = executionContext.getInt(getExecutionContextKey(RESOURCE_INDEX_KEY), 1); currentResourceItemCount = executionContext.getInt(getExecutionContextKey(CURRENT_RESOURCE_ITEM_COUNT), 0); try { setResourceToDelegate(); } catch (IOException e) { throw new ItemStreamException("Couldn't assign resource", e); } if (executionContext.containsKey(getExecutionContextKey(CURRENT_RESOURCE_ITEM_COUNT))) { // It's a restart delegate.open(executionContext); opened = true; } else { opened = false; } }
public MultiResourceItemWriter() { this.setExecutionContextName(ClassUtils.getShortName(MultiResourceItemWriter.class)); }
@Test public void testUpdateAfterDelegateClose() throws Exception { super.setUp(delegate); tested.open(executionContext); tested.update(executionContext); assertEquals(0, executionContext.getInt(tested.getExecutionContextKey("resource.item.count"))); assertEquals(1, executionContext.getInt(tested.getExecutionContextKey("resource.index"))); tested.write(Arrays.asList("1", "2", "3")); tested.update(executionContext); assertEquals(0, executionContext.getInt(tested.getExecutionContextKey("resource.item.count"))); assertEquals(2, executionContext.getInt(tested.getExecutionContextKey("resource.index"))); }
@Test public void testUpdateAfterDelegateClose() throws Exception { this.writer = new MultiResourceItemWriterBuilder<String>().delegate(this.delegate) .resource(new FileSystemResource(this.file)).resourceSuffixCreator(this.suffixCreator) .itemCountLimitPerResource(2).saveState(true).name("foo").build(); this.writer.update(this.executionContext); assertEquals(0, this.executionContext.getInt(this.writer.getExecutionContextKey("resource.item.count"))); assertEquals(1, this.executionContext.getInt(this.writer.getExecutionContextKey("resource.index"))); this.writer.write(Arrays.asList("1", "2", "3")); this.writer.update(this.executionContext); assertEquals(0, this.executionContext.getInt(this.writer.getExecutionContextKey("resource.item.count"))); assertEquals(2, this.executionContext.getInt(this.writer.getExecutionContextKey("resource.index"))); }
@Override public void update(ExecutionContext executionContext) throws ItemStreamException { super.update(executionContext); if (saveState) { if (opened) { delegate.update(executionContext); } executionContext.putInt(getExecutionContextKey(CURRENT_RESOURCE_ITEM_COUNT), currentResourceItemCount); executionContext.putInt(getExecutionContextKey(RESOURCE_INDEX_KEY), resourceIndex); } }
@Override public void write(List<? extends T> items) throws Exception { if (!opened) { File file = setResourceToDelegate(); // create only if write is called file.createNewFile(); Assert.state(file.canWrite(), "Output resource " + file.getAbsolutePath() + " must be writable"); delegate.open(new ExecutionContext()); opened = true; } delegate.write(items); currentResourceItemCount += items.size(); if (currentResourceItemCount >= itemCountLimitPerResource) { delegate.close(); resourceIndex++; currentResourceItemCount = 0; setResourceToDelegate(); opened = false; } }
@Override public void update(ExecutionContext executionContext) throws ItemStreamException { super.update(executionContext); if (saveState) { if (opened) { delegate.update(executionContext); } executionContext.putInt(getExecutionContextKey(CURRENT_RESOURCE_ITEM_COUNT), currentResourceItemCount); executionContext.putInt(getExecutionContextKey(RESOURCE_INDEX_KEY), resourceIndex); } }
@Override public void write(List<? extends T> items) throws Exception { if (!opened) { File file = setResourceToDelegate(); // create only if write is called file.createNewFile(); Assert.state(file.canWrite(), "Output resource " + file.getAbsolutePath() + " must be writable"); delegate.open(new ExecutionContext()); opened = true; } delegate.write(items); currentResourceItemCount += items.size(); if (currentResourceItemCount >= itemCountLimitPerResource) { delegate.close(); resourceIndex++; currentResourceItemCount = 0; setResourceToDelegate(); opened = false; } }
protected void setUp(ResourceAwareItemWriterItemStream<String> delegate) throws Exception { tested = new MultiResourceItemWriter<>(); tested.setResource(new FileSystemResource(file)); tested.setDelegate(delegate); tested.setResourceSuffixCreator(suffixCreator); tested.setItemCountLimitPerResource(2); tested.setSaveState(true); }
@Override public void open(ExecutionContext executionContext) throws ItemStreamException { super.open(executionContext); resourceIndex = executionContext.getInt(getExecutionContextKey(RESOURCE_INDEX_KEY), 1); currentResourceItemCount = executionContext.getInt(getExecutionContextKey(CURRENT_RESOURCE_ITEM_COUNT), 0); try { setResourceToDelegate(); } catch (IOException e) { throw new ItemStreamException("Couldn't assign resource", e); } if (executionContext.containsKey(getExecutionContextKey(CURRENT_RESOURCE_ITEM_COUNT))) { // It's a restart delegate.open(executionContext); opened = true; } else { opened = false; } }
public MultiResourceItemWriter() { this.setExecutionContextName(ClassUtils.getShortName(MultiResourceItemWriter.class)); }
/** * Builds the {@link MultiResourceItemWriter}. * * @return a {@link MultiResourceItemWriter} */ public MultiResourceItemWriter<T> build() { Assert.notNull(this.resource, "resource is required."); Assert.notNull(this.delegate, "delegate is required."); if(this.saveState) { org.springframework.util.Assert.hasText(this.name, "A name is required when saveState is true."); } MultiResourceItemWriter<T> writer = new MultiResourceItemWriter<>(); writer.setResource(this.resource); writer.setDelegate(this.delegate); writer.setItemCountLimitPerResource(this.itemCountLimitPerResource); if(this.suffixCreator != null) { writer.setResourceSuffixCreator(this.suffixCreator); } writer.setSaveState(this.saveState); writer.setName(this.name); return writer; }