Статьи

Создание весенней партии Groovy

Здесь, в Keyhole, мы очень любим Spring Batch. Во многих средах Java Enterprise все еще существует большая потребность в автоматизации перемещения данных. Spring Batch дает нам отличный старт для создания этих пакетных процессов.

Примечание: если вы находитесь в этом районе в среду вечером (8/5/15), проверьте презентацию Spring Batch управляющего партнера Keyhole Дэвида Питта на собрании группы пользователей Kansas City Spring .

Я уже несколько раз писал об использовании Groovy в качестве инструмента для быстрой разработки простого в обслуживании программного обеспечения. Я считаю, что тот факт, что Groovy по сути является Java и даже генерирует классы, которые можно запускать в JVM, является одним из его сильных сторон.

Джонни недавно написал в блоге сообщение о замене конфигурации XML для Spring Batch на JavaConfig . Поскольку все, что вы можете делать в Java, вы должны делать в Groovy, я начал задаваться вопросом, можете ли вы создать Spring Batch Groovy.

Groovy Конфигурация

Вот класс конфигурации Groovy, который я написал, чтобы увидеть.

Примечание: вы можете написать это с точкой с запятой или без нее, как считаете нужным. Я сделал это без, так что вы можете сказать, что это Groovy код.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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")
        .<String, String> chunk(5)
        .reader(new ItemReader<String>() {
                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<String, String>() {
                @Override
                public String process(String item) throws Exception {
                    return JsonOutput.toJson(1)
                }
            })
        .writer(new ItemWriter<String>() {
                @Override
                public void write(List<? extends String> items) throws Exception {
                    File file = new File("exampleJson.txt")
                    items.each { line ->
                        file << line
                    }
                }
            })
        .build()
    }
}

Этот код открывает файл и читает весь текст в Reader. Оборачивает этот текст в JSON в процессоре, а затем записывает его обратно в файл в модуле записи. Обратите внимание, что я использую дополнения Groovy к языку Java в каждом из них. Spring Batch поставляется с отличным набором читателей и писателей, которые могут выполнить то же самое, но иногда, ради обслуживания, вы просто хотите сделать что-то простое.

Основной файл Spring Boot, который я использовал, находится здесь.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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 может быть загружен на микросервисы, которые Keyhole разрабатывает для вас. Groovy имеет отличные возможности для связи через интерфейс RESTful и был бы отличным способом для ваших пакетных процессов взаимодействовать со Службами.

Я надеюсь, что это дает вам представление о том, что вы можете сделать, комбинируя эти технологии. Не забудьте добавить тестовые классы Спока и, надеюсь, сократить будущие проблемы с обслуживанием.

Хорошее кодирование.

Ссылка: Создание Spring Batch Groovy от нашего партнера JCG Рика Скарборо в блоге