我想在一个目录中使用读取文件并移动到另一个目录,我正在使用spring-integration。当来自另一个系统的请求时,我想执行任务(将文件移动到输出目录)。我不想重复运行文件移动器,有没有办法在Spring Integration中执行此操作?
提前谢谢你, Udeshika
答案 0 :(得分:1)
您可以使用轮询器进行一些操作,例如我在this answer中提到的FireOnceTrigger。但在这种情况下,可能最简单的解决方案是,而不是使用入站适配器,在您的上下文中定义<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\}'