Spring 集成服务激活器处理程序业务逻辑

Spring Integration Service Activator handler business logic

我目前是 Spring 集成的新手。
基本上尝试使用 Java Spring 集成 DSL 异步轮询多个文件位置。我需要获取文件名并使用文件名执行一些操作,最后将文件推送到 S3,我的问题是这些使用文件执行操作的任务是否可以在任务执行器或服务激活器处理程序中执行。我不确定哪个是正确的地方。

@Autowired
private AWSFileManager awsFileManager;

@Bean
public IntegrationFlow inboundChannelFlow(@Value("${file.poller.delay}") long delay,
@Value("${file.poller.messages}") int maxMsgsPerPoll,
TaskExecutor taskExecutor, MessageSource<File> fileSource) 
{
    return IntegrationFlows.from(fileSource,
            c -> c.poller(Pollers.fixedDelay(delay)
                    .taskExecutor(taskExecutor)
                    .maxMessagesPerPoll(maxMsgsPerPoll)))
            .handle("AWSFileManager", "fileUpload")
            .channel(ApplicationConfiguration.inboundChannel)
            .get();
}

@Bean
TaskExecutor taskExecutor(@Value("${file.poller.thread.pool.size}") int poolSize) {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    //Runnable task1 = () -> {this.methodsamp();};
    taskExecutor.setCorePoolSize(poolSize);

    //taskExecutor.execute(task1);
    return taskExecutor;
}
@Async
public void methodsamp()
{
    try
    {
        awsFileManager.fileUpload();
        System.out.println("test");
    }
    catch(Exception ex)
    {

    }

我在这里附上了示例代码。
还有一种方法可以检索通道中文件的文件名,因为我需要将其作为参数传递给 fileUpload 方法。 请指教

你的问题不清楚。 TaskExecutor 用于流中的线程上下文。 Service Activator (.handle()) 正是您的业务逻辑方法。这可以在执行程序的线程上执行。而且您确实在 IntegrationFlow 中正确使用了它们。

FileReadingMessageSource 生成 java.io.File 作为 payload 的消息。所以,这就是获取文件名的方法 - 仅来自 File.getName()!