Здесь, в 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.exampleimport org.springframework.batch.core.Jobimport org.springframework.batch.core.Stepimport org.springframework.batch.core.configuration.annotation.EnableBatchProcessingimport org.springframework.batch.core.configuration.annotation.JobBuilderFactoryimport org.springframework.batch.core.configuration.annotation.StepBuilderFactoryimport org.springframework.batch.core.launch.support.RunIdIncrementerimport org.springframework.batch.item.ItemReaderimport org.springframework.batch.item.ItemProcessorimport org.springframework.batch.item.ItemWriterimport org.springframework.batch.item.NonTransientResourceExceptionimport org.springframework.batch.item.ParseExceptionimport org.springframework.batch.item.UnexpectedInputExceptionimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.boot.autoconfigure.EnableAutoConfigurationimport org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configurationimport groovy.json.*/** * * @author rik */@Configuration@EnableAutoConfiguration@EnableBatchProcessingpublic 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.exampleimport org.springframework.boot.SpringApplicationimport org.springframework.boot.autoconfigure.SpringBootApplication/** * * @author rik */@SpringBootApplicationpublic 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 Рика Скарборо в блоге |