Как прочитать список имен файлов из БД и загрузить их на FTP-сайт

Мне нужно запланировать задание, чтобы прочитать список имен файлов из БД и загрузить их на FTP-сайт. Как мне это сделать в WSO2 ESB?

Спасибо

Обновления (19.07.16): на основе приведенных предложений я написал хранимую процедуру для возврата всех имен файлов в формате xml. Теперь, когда мне нужно выяснить, как анализировать этот результат в формате xml, можно использовать ftp с помощью fileconnector. Пожалуйста, дайте мне знать, если мой подход работоспособен. Спасибо большое за вашу помощь.

<proxy name="FileUpload2CDGPS" startOnLoad="true" trace="disable" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <sequence key="FileLookupSeq"/>
            <sequence key="SendFile2VendorSeq"/>
            <send/>
        </inSequence>
        <outSequence/>
        <faultSequence>
            <drop/>
        </faultSequence>
    </target>
</proxy>

<sequence name="FileLookupSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <log description="LogMessage" level="custom">
    <property name="message" value="Find CDR files to upload"/>
  </log>
  <dblookup description="Get CDR files to be upload">
    <connection>
      <pool>
        <password>***</password>
        <driver>org.postgresql.Driver</driver>
        <url>jdbc:postgresql://localhost:5432/esbcdrdb</url>
        <user>***</user>
      </pool>
    </connection>
    <statement>
      <sql><![CDATA[SELECT * FROM find_cdr_file_to_upload(1)]]></sql>
      <result name="xml_file" column="find_cdr_file_to_upload"/>
    </statement>
  </dblookup>
</sequence>

<sequence name="SendFile2VendorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <iterate attachPath="//files/files-set" description=""
    expression="//files/files-set/file" preservePayload="true">
    <target>
      <sequence>
        <property description="fileName"
          expression="//files/files-set/file/name" name="fileName"
          scope="default" type="STRING"/>
        <property description="fileId"
          expression="//files/files-set/file/id" name="fileId"
          scope="default" type="STRING"/>
        <property description="fileSource"
          expression="//files/files-set/file/path" name="fileSource"
          scope="default" type="STRING"/>
        <property description="vendorId"
          expression="//files/files-set/file/vendor-id" name="vendorId"
          scope="default" type="STRING"/>
        <property description="vendorDest"
          expression="//files/files-set/file/vendor-dest"
          name="vendorDest" scope="default" type="STRING"/>
        <fileconnector.copy>
          <source>{$ctx:fileSource}</source>
          <destination>{$ctx:vendorDest}</destination>
          <filePattern>{$ctx:fileName}</filePattern>
        </fileconnector.copy>
      </sequence>
    </target>
  </iterate>
</sequence>

1 ответ

Решение

Есть много способов сделать это.

  • Вы можете напрямую написать свое требование в задаче расписания, которая обрабатывает соединение с БД и загружает файл на FTP-сайт. Как написать расписание задачи
  • Или Вы можете вызвать прокси через образец запланированной задачи, можно найти здесь. А внутри прокси вы можете подключиться к базе данных и получить необходимые данные и загрузить их на FTP с помощью VFS, или вы можете написать собственный посредник, который будет выполняться внутри прокси.
Другие вопросы по тегам