制作Spring Batch Groovy

在Keyhole,我们非常喜欢Spring Batch。 在许多Java Enterprise环境中,仍然非常需要自动移动数据。 Spring Batch为我们提供了创建这些批处理过程的良好开端。

注意:如果您在星期三晚上(15/5/15)在该地区,请在堪萨斯城Spring用户小组会议上查看Keyhole总经理合伙人David Pitt的Spring批演示文稿。

我已经写了好几次有关使用Groovy作为快速开发易于维护的软件的工具的文章。 我认为,Groovy本质上是Java甚至生成可以在JVM中运行的类这一事实是其最强的优势之一。

Jonny最近写了一篇博客文章,内容涉及用JavaConfig替换Spring Batch的XML配置 。 由于您可以用Java做任何事情,因此您应该可以在Groovy中做,我开始怀疑您是否可以制作Spring Batch Groovy。

Groovy配置

这是我写过的Groovy Configuration类。

注意:您可以根据需要编写带或不带分号的代码。 我没有这样做,所以您可以分辨出它是Groovy代码。

package com.keyholesoftware.example

import org.springframework.batch.core.Job
import org.springframework.batch.core.Step
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory
import org.springframework.batch.core.launch.support.RunIdIncrementer
import org.springframework.batch.item.ItemReader
import org.springframework.batch.item.ItemProcessor
import org.springframework.batch.item.ItemWriter
import org.springframework.batch.item.NonTransientResourceException
import org.springframework.batch.item.ParseException
import org.springframework.batch.item.UnexpectedInputException
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

import groovy.json.*

/**
 *
 * @author rik
 */
@Configuration
@EnableAutoConfiguration
@EnableBatchProcessing
public class GroovyExampleConfig {

    @Autowired
    private JobBuilderFactory jobs

    @Autowired
    private StepBuilderFactory steps

    @Bean
    public Job job() throws Exception {
        return jobs.get("groovyExample").start(exampleStep()).build()
    }

    @Bean
    public Step exampleStep() {
        return steps.get("exampleStep")
        . chunk(5)
        .reader(new ItemReader() {
                boolean finished = false
                @Override
                public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
                    if(!finished) {
                        finished = true
                        return new File("example.txt").text
                    } else {
                        return null
                    }
                }
            })
        .processor(new ItemProcessor() {
                @Override
                public String process(String item) throws Exception {
                    return JsonOutput.toJson(1)
                }
            })
        .writer(new ItemWriter() {
                @Override
                public void write(List items) throws Exception {
                    File file = new File("exampleJson.txt")
                    items.each { line ->
                        file << line
                    }
                }
            })
        .build()
    }
}

此代码打开一个文件,并在Reader中读取整个文本。 将该文本包装在Processor中的JSON中,然后将其写回到writer中的文件中。 注意,我在每种语言中都使用了Java语言的Groovy附加功能。 Spring Batch配备了一组优秀的读者和作家,可以完成相同的工作,但是有时出于维护的考虑,您只想做一些简单的事情。

我使用的Spring Boot主文件在这里。

package com.keyholesoftware.example

import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
/**
 *
 * @author rik
 */
@SpringBootApplication
public class GroovyBatch {

    public static void main(String[] args) throws Exception {
        System.exit(SpringApplication.exit(SpringApplication.run(
                    GroovyExampleConfig.class, args)))
    }
}

Groovy具有许多可以帮助您快速开发应用程序的功能,但是与我将不愿提及的其他某些语言不同,这种权衡并不会造成难以维护的代码。

而不是简单地将结果写出来的我用的例子,JSON输出可以被上传至微服务是锁Kong为您开发。 Groovy具有用于通过RESTful接口进行通信的强大功能,并且是批处理流程与服务进行通信的绝佳方式。

我希望这能使您了解如何结合使用这些技术。 不要忘记添加Spock测试类,并希望减少以后的维护麻烦。

好的编码。

翻译自: https://www.javacodegeeks.com/2015/08/making-spring-batch-groovy.html

你可能感兴趣的:(java,spring,spring,boot,编程语言,linux)