0

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

提前谢谢你, Udeshika

4

2 回答 2

2

您可以使用轮询器执行一些技巧,例如我在此答案中提到的 FireOnceTrigger 。但在这种情况下,可能最简单的解决方案是,在您的上下文中定义一个<bean/>类型,而不是使用入站适配器;FileReadingMessageSource在 main() ( ) 中获取对它的引用context.getBean(FileReadingMessagesource.class)。继续调用receive()并将收到的消息发送到流中的第一个通道(或使用<gateway/>.

receive()返回null时,退出。

于 2013-06-13T07:02:50.743 回答
0

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

FileService.java 豆:

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\}'
于 2020-03-11T06:54:46.533 回答