当来自其他系统的请求时,将文件从一个目录移动到另一个目录

时间:2013-06-12 10:34:23

标签: spring-integration

我想在一个目录中使用读取文件并移动到另一个目录,我正在使用spring-integration。当来自另一个系统的请求时,我想执行任务(将文件移动到输出目录)。我不想重复运行文件移动器,有没有办法在Spring Integration中执行此操作?

提前谢谢你, Udeshika

2 个答案:

答案 0 :(得分:1)

您可以使用轮询器进行一些操作,例如我在this answer中提到的F​​ireOnceTrigger。但在这种情况下,可能最简单的解决方案是,而不是使用入站适配器,在您的上下文中定义<bean/>类型FileReadingMessageSource;在main()(context.getBean(FileReadingMessagesource.class))中获取对它的引用。继续致电receive()并将收到的信息发送到您信息流中的第一个频道(或使用<gateway/>

receive()返回null时,退出。

答案 1 :(得分:0)

从没有轮询程序的samba共享读取指定文件的示例:

FileService.java Bean:

import org.springframework.context.ApplicationContext;
import org.springframework.integration.smb.session.SmbSession;
import org.springframework.integration.smb.session.SmbSessionFactory;
 ...
@Component
public class FileService {
    private @Autowired ApplicationContext appContext;
    ... 
    private byte[] getFileContent( final String filename ) {
        final SmbSessionFactory smbSessionFactory = (SmbSessionFactory) appContext.getBean("MySmbSession");
        final SmbSession smbSession = smbSessionFactory.getSession();
        final ByteArrayOutputStream output = new ByteArrayOutputStream();
        try {
            smbSession.read("mysharefolder\" + filename, output);
        } catch (final IOException e) {
            throw new IllegalStateException(e);
        }
        return output.toByteArray();
    }
}

spring_integration.xml配置文件:

...
<!-- smb configuration for samba  smb://[[[domain;]username[:password]@]server[:port]/[[share/[dir/]file]]][?[param=value[param2=value2[...]]] -->
<bean id="MySmbSession" class="org.springframework.integration.smb.session.SmbSessionFactory">
    <property name="host" value="${samba.host}"/>
    <property name="port" value="${samba.port}"/>
    <property name="username" value="${samba.username}"/>
    <property name="password" value="${samba.password}"/>
    <property name="shareAndDir" value="${samba.shareAndDir}"/>
    <property name="replaceFile" value="true"/>
</bean>
...

application.yml配置文件:

samba:
  host : '${SAMBA_HOST:172.16.0.7}'
  hostAlias : '${SAMBA_HOST_ALIAS:mywinsrv}'
  port : '${SAMBA_PORT:445}'
  username : '${SAMBA_USER_NAME:DMZ\myusername}' 
  password : '${SAMBA_USER_PASS:mypassword}'
  shareAndDir : '${SAMBA_SHARE_AND_DIR:myDocs$\myproject\}'