التكامل الربيعي، حذف الملف في محول القناة الصادرة
-
13-12-2019 - |
سؤال
أنا أستخدم Spring Integration لاستقصاء دليل لملف، ومعالجة هذا الملف في فئة الخدمة، وكتابة هذا الملف إلى دليل الإخراج ثم حذف الملف الأصلي.
لدي تكوين XML التالي:
<int-file:inbound-channel-adapter id="filesInChannel"
directory="file:${java.io.tmpdir}/input"
auto-create-directory="true" >
<int:poller id="poller" fixed-delay="1000" />
</int-file:inbound-channel-adapter>
<int:service-activator id="servicActivator"
input-channel="filesInChannel"
output-channel="filesOut"
ref="my_file_processing_service">
</int:service-activator>
<int-file:outbound-channel-adapter id="filesOut" auto-create-directory="true" delete-source-files="true" directory="file:${java.io.tmpdir}/output"/>
يقوم هذا باستقصاء الملف وتمريره إلى خدمة المعالجة الخاصة بي ونسخه إلى الدليل الصادر.ومع ذلك، لا يتم حذف الملف الأصلي.هل لدى أي شخص أي فكرة لماذا لا؟
المحلول
أعلم أن السؤال تم طرحه منذ وقت طويل ولكن ربما تكون الإجابة مفيدة لشخص آخر.
يتم توفير سبب عدم حذف ملف الإدخال في ملف مرجع التكامل الربيع:
ال
delete-source-files
لن يكون للسمة تأثير إلا إذا كانت الرسالة الواردة تحتوي على حمولة ملفات أو إذا كانFileHeaders.ORIGINAL_FILE
تحتوي قيمة الرأس على مثيل الملف المصدر أو سلسلة تمثل مسار الملف الأصلي.
لا تحتوي رسالتك على هذا الرأس المحدد.إذا كنت تستخدم واحدة من محولات الملفات القياسية (FileToStringTransformer
و FileToByteArrayTransformer
) سيتم ضبطه تلقائيًا.وبدلاً من ذلك، يمكنك ضبطه يدويًا باستخدام ملف إثراء الرأس.
خلف الكواليس يحدث شيء مثل هذا في محولات الملفات:
...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
.copyHeaders(message.getHeaders())
.setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
.setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
.build();
...
نصائح أخرى
من الوثائق http://static.springsource.org/spring-إدماج / مرجع / HTML / files.html
giveacodicetagpre.لا أعرف كيفية القيام بذلك على محول القناة الداخلي (التي أعتقد أنها منطقية)