سؤال

أنا أستخدم 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.

لا أعرف كيفية القيام بذلك على محول القناة الداخلي (التي أعتقد أنها منطقية)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top