Вы можете реализовать свой собственный FlatFileItemWriter
, чтобы переопределить метод setResource
и добавить свою собственную логику для переименования файла.
Вот пример реализации:
@Override
public void setResource(Resource resource) {
if (resource instanceof ClassPathResource) {
// Convert resource
ClassPathResource res = (ClassPathResource) resource;
try {
String path = res.getPath();
// Do something to "path" here
File file = new File(path);
// Check for permissions to write
if (file.canWrite() || file.createNewFile()) {
file.delete();
// Call parent setter with new resource
super.setResource(new FileSystemResource(file.getAbsolutePath()));
return;
}
} catch (IOException e) {
// File could not be read/written
}
}
// If something went wrong or resource was delegated to MultiResourceItemWriter,
// call parent setter with default resource
super.setResource(resource);
}
Другая возможность существует с использованием jobParameters
, если ваша логика может быть применена, прежде чем работа начата. См. 5.4 Late Binding весенней пакетной документации.
Пример:
<bean id="flatFileItemReader" scope="step" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" value="#{jobParameters['input.file.name']}" />
</bean>
Вы также можете использовать MultiResourceItemWriter
с обычаем ResourceSuffixCreator
. Это позволит вам создавать файлы с 1 по n с общим шаблоном имени файла.
Вот пример метода getSuffix
заказного ResourceSuffixCreator
:
@Override
public String getSuffix(int index) {
// Your logic
if (true)
return "XXX" + index;
else
return "";
}
Спасибо за ваш ответ. –