当前位置: 首页 > 知识库问答 >
问题:

Spring Integration Spring批处理Java配置

边意
2023-03-14

我们正在处理一个Spring批处理项目(Spring Boot1.2.2.Release),要求使用Spring SFTP集成以一定频率轮询从服务器位置读取文件。我们使用java config实现了Spring批处理,并在使用Spring Integration java config的过程中实现了Spring批处理。我找不到描述上述情况的例子。我浏览了各种链接,但看到的主要是XML配置示例。

http://spring.io/blog/2010/02/15/practice-use-of-spring-batch-and-spring-integration https://github.com/spring-projects/spring-integration-samples/tree/master/basic/sftp

是否可以使用spring integration java Config轮询文件?如有任何帮助/指导,将不胜感激。

@Configuration
public class SftpConfiguration {

    @Autowired
    SftpProperties sftpProperties;

    @Bean
    public SessionFactory<LsEntry> getSftpSessionFactory() {
        Resource resource = new FileSystemResource(
                sftpProperties.privateKeyLocation);
        DefaultSftpSessionFactory sftpSessionFactory = new DefaultSftpSessionFactory();
        sftpSessionFactory.setHost(sftpProperties.hostName);
        sftpSessionFactory.setPort(sftpProperties.port);
        sftpSessionFactory.setUser(sftpProperties.username);
        sftpSessionFactory.setPrivateKey(resource);
        return sftpSessionFactory;
    }

    @Bean
    @InboundChannelAdapter(value = "sftpChannel", poller = @Poller(fixedDelay = "1000", maxMessagesPerPoll = "1"))
    public MessageSource<File> sftp() {
        SftpInboundFileSynchronizingMessageSource source = null;
        SftpInboundFileSynchronizer sftpInboundFileSynchronizer = null;
        File localDirectory = new File(sftpProperties.localDirectory);

        try {
            sftpInboundFileSynchronizer = new SftpInboundFileSynchronizer(getSftpSessionFactory());
            sftpInboundFileSynchronizer.setFilter(new SftpSimplePatternFileListFilter(sftpProperties.fileNamePattern));
            sftpInboundFileSynchronizer.setRemoteDirectory(sftpProperties.remoteDirectory);
            sftpInboundFileSynchronizer.setPreserveTimestamp(Boolean.TRUE);
            sftpInboundFileSynchronizer.synchronizeToLocalDirectory(localDirectory);
            sftpInboundFileSynchronizer.setDeleteRemoteFiles(Boolean.FALSE);
            sftpInboundFileSynchronizer.setTemporaryFileSuffix(".copy");
            source = new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return source;
    }
}
@SpringBootApplication
@EnableIntegration
@IntegrationComponentScan
public class SpringIntegrationApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringIntegrationApplication.class, args);
    }
}

该项目是一个spring boot starter项目。

release
UTF-8 com.spring.integration.test.springintegrationapplication 1.7 org.springframework.boot spring-boot-starter-integration org.springframework.integration spring-integration-sftp org.springframework.boot spring-boot-starter-web

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-sftp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    </dependency>

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.10.4</version>
</dependency>
<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-cypher-compiler-2.1</artifactId>
    <version>2.1.5</version>
</dependency>

共有1个答案

锺离浩慨
2023-03-14

参见参考手册附录F。

@Bean
@InboundChannelAdapter( ... , poller = @Poller(...))
public MessageSource sftp() {
    SftpInboundFileSynchronizingMessageSource source = new ...;
    ...
    return source;
}

源代码需要一个SFTPInboundFileSynchronizerbean,它需要一个SessionFactory(通常是DefaultsFTPSessionFactory)。

 类似资料:
  • 如何使用Java配置实现这一点?

  • 我有下一个spring批处理配置类: 启动应用程序时,我收到下一个异常:

  • Spring Integration Java DSL Reference和Spring Batch Java配置文档说明了如何将Java配置用于Spring Integration和Spring Batch。 但它们没有说明如何为Spring批处理集成配置它。如何使用DSL配置JobLaunchingGateway? 干杯,曼诺

  • 这是我第一次使用Spring批处理,我有一个例外: 我不知道如何解决这个错误。我使用Java配置来定义作业、步骤、读取器、处理器和写入器: null

  • 我有一个假问题。为了解释我的用例,我有不同类型的DAO;比如说啤酒。。。等等,我想用一个通用的ItemWriter来处理所有的问题。我创建了一个,在这里我定义了; 作家班是这样的; 到目前为止一切都还好。事情变得复杂的地方是,我为每个存储库定义了单独的配置类,其中定义了存储库特定的项。例如,为用户插入数据库的步骤。 当我用IJ编写这段代码时,我抱怨

  • 我的Spring Batch存储库(部署在Oracle数据库上)位于不同的模式中,因此我需要在模式名称之前添加。 使用XML配置时,这很容易做到: 但是,当我使用JavaConfig时,这变得更加棘手。我发现的最佳解决方案是让我的JavaConfig类并覆盖方法: 与XML解决方案相比,这相当多的代码!这也不太符合逻辑——我的第一个猜测是提供一个< code>@Bean方法,如下所示: 但这没用。