1. 程式人生 > >spring batch demo[極簡版]

spring batch demo[極簡版]

1. maven

<dependency>
	<groupId>org.springframework.batch</groupId>
	<artifactId>spring-batch-core</artifactId>
	<version>3.0.8.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework.batch</groupId>
	<artifactId>spring-batch-infrastructure</artifactId>
	<version>3.0.8.RELEASE</version>
</dependency>

2. BatchTest類

public class BatchTest {

    @Test
    public void test() throws Exception {
    ResourcelessTransactionManager transactionManager = new ResourcelessTransactionManager();
        MapJobRepositoryFactoryBean jobRepositoryFactoryBean = new MapJobRepositoryFactoryBean();
        jobRepositoryFactoryBean.setTransactionManager(transactionManager);
        JobRepository jobRepository = jobRepositoryFactoryBean.getObject();
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setJobRepository(jobRepository);

        SyncTaskExecutor taskExecutor = new SyncTaskExecutor();
        jobLauncher.setTaskExecutor(taskExecutor);

        StepBuilderFactory stepBuilderFactory = new StepBuilderFactory(jobRepository,transactionManager);
        Step step = personStep(stepBuilderFactory,reader("person.csv")
        ,new PersonWriter(), new PersonItemProcessor());

        JobBuilderFactory jobBuilderFactory = new JobBuilderFactory(jobRepository);
        Job job = jobBuilderFactory.get("job")
                .start(step)
                .build();
        jobLauncher.run(job,new JobParameters());
    }

    public ItemReader<Person> reader(String inputFile){
        if(inputFile == null)
            return null;
        FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource(inputFile));
        reader.setLineMapper(lineMapper());
        reader.setLinesToSkip(1);
        ExecutionContext executionContext = new ExecutionContext();
        return reader;
    }

    public Step personStep(StepBuilderFactory stepBuilderFactory, ItemReader<Person> reader,
                           ItemWriter<Person> writer, ItemProcessor<Person,Person> processor){
        return stepBuilderFactory.get("personStep")
                .<Person,Person>chunk(1)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }

    public LineMapper<Person> lineMapper(){
        DefaultLineMapper<Person> lineMapper = new DefaultLineMapper<>();
        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setDelimiter(",");
        lineTokenizer.setStrict(false);
        lineTokenizer.setNames(new String[]{"name","age"});

        BeanWrapperFieldSetMapper<Person> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
        fieldSetMapper.setTargetType(Person.class);
        lineMapper.setLineTokenizer(lineTokenizer);
        lineMapper.setFieldSetMapper(new PersonFieldSetMapper());
        return lineMapper;
    }
}

3. PersonWriter類

public class PersonWriter implements ItemWriter<Person> {
    @Override
    public void write(List<? extends Person> list) throws Exception {
        //TODO 插入資料庫
        for(Person person:list){
            System.out.println(person);
        }
    }
}

4. PersonItemProcessor

public class PersonItemProcessor implements ItemProcessor<Person,Person> {

    public String inputFile;

    public PersonItemProcessor(){}

    public PersonItemProcessor(String inputFile){
        this.inputFile = inputFile;
    }

    @Override
    public Person process(Person person) {
        System.out.println("handle person " + person.getName());
        return person;
    }
}

5. PersonFieldSetMapper類

public class PersonFieldSetMapper implements FieldSetMapper<Person> {

    @Override
    public Person mapFieldSet(FieldSet fieldSet) throws BindException {
        String name = fieldSet.readRawString("name");
        int age = fieldSet.readInt("age");
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        return person;
    }
}

6. person.csv

name,age
yaoming,33

相關推薦

spring batch demo[]

1. maven<dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-core</artifactId&g

spring batch demo 註解

pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

cookie——登錄註冊

btn .html dsta encode ont creat lac set tle 本實例旨在最直觀地說明如何利用cookie完成登錄註冊功能,忽略正則驗證。 index.html <!doctype html> <html lang="en"&

Spring Boot 如何入門?

-c auto java技術 ror 獲得 交流群 kit net service Spring Boot已成為當今最流行的微服務開發框架,本文是如何使用Spring Boot快速開始Web微服務開發的指南,我們將創建一個可運行的包含內嵌Web容器(默認使用的是Tomcat

JAVA聊天室-

實現客戶端和服務端的連線並且可以群聊*##“` 客戶端 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStrea

秒錶(java GUI)

package javaPractice; import javax.swing.*; import java.text.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class Stopwat

學生管理系統

package javaBasic; import java.text.SimpleDateFormat; import java.util.*; public class StudentCard { public static void main(String[] args) { Stu

簡單快速的“桶排序”--

題目:給學生成績排序 輸入:10,3,4,7,5,5等分數 輸出:由大到小的順序排序 #include<iostream> using namespace std; int main() { //這裡假設有十個學生成績 int a[11],i

Spring的AOP入門

AOP是Spring中的面向切面的程式設計,這裡簡單感受一下如何在xml檔案中配置一個切面。 如上圖所示,配置一個切面的主要思路有以下幾個步驟。 1,首先需要把實現切面功能的類宣告為一個bean,例如圖中的minstrel。 2,前面的配置都在<aop:config>標

Github Pages+Hexo部落格搭建教程

目錄 1.環境安裝 1.1安裝nodejs與git 1.2檢查是否安裝成功 2.安裝hexo 2.1安裝命令 2.2hexo初始化 3.更換hexo主題 4

機器學習各演算法思想(

讀到的一篇不錯的文章,拿來和大家分享一下。 轉自–頭條公眾號–極數蝸牛 (1)線性迴歸 迴歸最早是由高爾頓研究子女身高與父母身高遺傳關係提出的,發現子女平均身高總是向中心迴歸而得名。其實“一分辛苦一分才”中就蘊含了線性迴歸演算法思想,比較簡單表現出才能與辛

HttpClient原始碼解析系列:第二篇:實現

極簡版的實現,核心架構的原初模型     從MinimalHttpClient從名字可以看出,是一個極簡可以用的版本,是核心設計的原初模型。所以我們就從最精簡的開始分析。          核心元素只有三個,一個引數 params,一個執行器 requestExecuto

C語言計算器

用c寫的簡單的計算器 介面如下圖所示: 感興趣可點選下載: 原始碼如下: #include "stdafx.h" #include <windows.h> #include <windowsx.h> #include "resource.h" #

一個的nodejs增刪改查

json版 var express = require('express'); var fs = require("fs"); var app = express(); app.get("/", function(req, res){ res.

】SpringBoot+SpringData JPA 管理系統

開發十年,就只剩下這套架構體系了! >>>   

Java 線程第三 第五章 同步技巧 讀書筆記

prev ear ont java else 停止 第三版 不同的 結合 一、能避免同步嗎? 取得鎖會由於下面原因導致成本非常高: 取得由競爭的鎖須要在虛擬機的層面上執行很多其它的程序代碼。 要取得有競爭鎖的線程總是必須等到鎖被釋放後。 1. 寄

Spring學習(三)例項化Bean的方法有兩種

其實例項化一個Bean並沒有那麼複雜,不就是將new Bean()的過程放到Spring這裡來實現了嗎? 其實的確如此,當然了,之前的設計模式中的例項化Bean的方式Spring也得支援支援吧。 一、最直觀例項化(反射模式) xml配置 <bean id="car1

Spring學習(二)給Bean加些小動作

上一篇文章已經講過了Spring是如何把自己注入到Web應用中的,並且通過配置檔案的讀取開始Bean的例項化之路。 1、例項化後、銷燬前 當然除了對常規的Bean的例項化之外,往往會產生一些特別的要求,例如在bean例項化後要做一個什麼動作,比如起一個執行緒服務。或者在bean銷

Spring學習(一)載入第一步——ContextLoaderListener

Spring的功能已經算是瞭解了,也就是幫助例項化物件,並且進行一些面向切面的功能插入。 先不論上述兩者的具體實現技術,先看看在Web框架層面是如何將Spring整個引入進來的。 1、web.xml Web應用啟動後,最先解析的的就是web.xml,因此Spring載入的密碼

Spring Boot教程》第2章 Spring Boot簡史

第2章 Spring Boot簡史 Java Web開發涉及的技術比較繁雜,涉及到很多開發框架和工具(Java, Scala, Kotlin, Clojure,Groovy, Grails,Gradle, Maven, JDBC,Mysql, oracle, mongodb, Tomc