Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JobLaunchingGateway与spring批处理和spring集成一起使用引发DestinationResolutionException_Java_Spring_Spring Integration_Spring Batch - Fatal编程技术网

Java 将JobLaunchingGateway与spring批处理和spring集成一起使用引发DestinationResolutionException

Java 将JobLaunchingGateway与spring批处理和spring集成一起使用引发DestinationResolutionException,java,spring,spring-integration,spring-batch,Java,Spring,Spring Integration,Spring Batch,我想定期扫描目录以查找与特定模式匹配的文件,并为找到的文件启动作业 @Configuration @EnableBatchProcessing public class BatchConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Autowired public Batc

我想定期扫描目录以查找与特定模式匹配的文件,并为找到的文件启动作业

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Autowired
    public BatchConfiguration(final JobBuilderFactory jobBuilderFactory, final StepBuilderFactory stepBuilderFactory) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
    }

    @Bean
    public FileMessageToJobRequest fileMessageToJobRequestTransformer(final Job myJob) {
        return new FileMessageToJobRequest(myJob, "input.file.name");
    }

    @Bean
    public MessageSource<File> fileMessageSource() {
        final FileReadingMessageSource fileReadingMessageSource = new FileReadingMessageSource();
        fileReadingMessageSource.setDirectory(directory));
        fileReadingMessageSource.setFilter(new CompositeFileListFilter<>(Arrays.asList(
                new AcceptOnceFileListFilter<>(),
                new SimplePatternFileListFilter(pattern)
        )));
        return fileReadingMessageSource;
    }

    @Bean
    public IntegrationFlow pollingFlow(final FileMessageToJobRequest fileMessageToJobRequest, final JobLaunchingGateway jobLaunchingGateway) {
        return IntegrationFlows.from(fileMessageSource(),
                c -> c.poller(Pollers.fixedDelay(10, TimeUnit.SECONDS)))
                .transform(fileMessageToJobRequest)
                .handle(jobLaunchingGateway)
                .get();
    }

    @Bean
    public JobLaunchingGateway jobLaunchingGateway(final JobLauncher jobLauncher) {
        return new JobLaunchingGateway(jobLauncher);
    }

    // Step definition omitted for readability

    @Bean(name = "myJob")
    public Job myJob(final JobCompletionNotificationListener listener, final @Qualifier("step1") Step step) {
        return jobBuilderFactory.get("myJob")
                .preventRestart()
                .incrementer(new RunIdIncrementer())
                .listener(listener)
                .flow(myStep)
                .end()
                .build();
    }
}

执行作业后,如何停止将
JobLaunchingGateway
消息发布到输出通道?

这是因为
JobLaunchingGateway
是Request/reply组件,它需要
outputChannel
replyChannel
头。同时,您的配置中只有以下内容:

 .handle(jobLaunchingGateway)
 .get();
如果您对那里的回复不感兴趣,您可以在最后添加以下内容:

 .handle(jobLaunchingGateway)
 .channel("nullChannel")
 .get();

伟大的我已经用ServiceActivator试过了,不知道也可以从流中完成。谢谢。如果您不想等待作业结果,还可以使用
JobLaunchingMessageHandler
。因此
JobLaunchingGateway
是一个合适的
MessageHandler
,它在返回
JobExecution
之前简单地委托给
JobLaunchingMessageHandler
?直接调用处理程序似乎是一个更好的主意,谢谢你的提示。
JobLaunchingMessageHandler
只是一个POJO,从消息传递中释放出来,但它仍然是Request/reply,你会得到相同的
无输出通道或replyChannel
错误:
 .handle(jobLaunchingGateway)
 .channel("nullChannel")
 .get();