2019独角兽企业重金招聘Python工程师标准>>>

Spring Batch_官网DEMO实现

http://spring.io/guides/gs/batch-processing/

使用spring xml方式实现了spring batch官网的demo,现在把具体的代码贴出来,具体的细节配置还要参考官网的说明。

首先建立maven项目,pom文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>lyx</groupId><artifactId>SpringBatch2</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--spring context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.1.RELEASE</version></dependency><!--spring core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.1.1.RELEASE</version></dependency><!--spring bean --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.1.1.RELEASE</version></dependency><!--spring aop --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.1.1.RELEASE</version></dependency><!--spring jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.1.1.RELEASE</version></dependency><!-- spring tx --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.1.1.RELEASE</version></dependency><dependency><groupId>org.springframework.batch</groupId><artifactId>spring-batch-core</artifactId><version>3.0.2.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId><version>8.0.14</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency></dependencies>
</project>

最主要的就是配置下面的这个spring-batch2.xml文件,也就是配置reader,writer,processor,以及各种依赖类。该spring-batch2.xml文件时依据BatchConfiguration.java配置的,具体配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springframework.org/schema/batch"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd"><bean id="lineTokenizer"class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"><property name="delimiter" value="," /><property name="names"><list><value>firstName</value><value>lastName</value></list></property></bean><bean id="fieldSetMapper"class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"><property name="prototypeBeanName" value="person" /></bean><bean id="person" class="com.lyx.batch.Person" scope="prototype" /><bean id="lineMapper"class="org.springframework.batch.item.file.mapping.DefaultLineMapper"><property name="lineTokenizer" ref="lineTokenizer" /><property name="fieldSetMapper" ref="fieldSetMapper" /></bean><bean id="resource" class="org.springframework.core.io.ClassPathResource"><constructor-arg index="0" type="java.lang.String"value="sample-data.csv" /></bean><bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"><property name="resource" ref="resource" /><property name="encoding" value="utf-8" /><property name="lineMapper" ref="lineMapper" /></bean><bean id="itemProcessor" class="com.lyx.batch.PersonItemProcessor" /><bean id="jdbcBatchItemWriter"class="org.springframework.batch.item.database.JdbcBatchItemWriter"><property name="itemSqlParameterSourceProvider" ref="itemSqlParameterSourceProvider" /><property name="sql"value="INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)" /><property name="dataSource" ref="dataSource" /></bean><bean id="itemSqlParameterSourceProvider"class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" /><!--tomcat jdbc pool数据源配置 --><bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"destroy-method="close"><property name="poolProperties"><bean class="org.apache.tomcat.jdbc.pool.PoolProperties"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/test" /><property name="username" value="root" /><property name="password" value="034039" /><property name="maxActive" value="100" /><property name="initialSize" value="10" /><property name="maxWait" value="10000" /><property name="minIdle" value="10" /></bean></property></bean><batch:job id="sampleJob" job-repository="jobRepository"><batch:step id="step"><tasklet transaction-manager="transactionManager"><chunk reader="flatFileItemReader" processor="itemProcessor"writer="jdbcBatchItemWriter" commit-interval="1" /></tasklet></batch:step></batch:job><!-- spring batch 配置jobRepository --><batch:job-repository id="jobRepository"data-source="dataSource" transaction-manager="transactionManager"isolation-level-for-create="REPEATABLE_READ" table-prefix="BATCH_"max-varchar-length="1000" /><!-- spring的事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- batch luncher --><bean id="jobLauncher"class="org.springframework.batch.core.launch.support.SimpleJobLauncher"><property name="jobRepository" ref="jobRepository" /></bean>
</beans>

主要的类有以下两个类:

Person.java

package com.lyx.batch;public class Person {private String lastName;private String firstName;public Person() {}public Person(String firstName, String lastName) {this.firstName = firstName;this.lastName = lastName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getFirstName() {return firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}@Overridepublic String toString() {return "firstName: " + firstName + ", lastName: " + lastName;}}

PersonItemProcessor.java

package com.lyx.batch;import org.springframework.batch.item.ItemProcessor;public class PersonItemProcessor implements ItemProcessor<Person, Person> {public Person process(final Person person) throws Exception {final String firstName = person.getFirstName().toUpperCase();final String lastName = person.getLastName().toUpperCase();final Person transformedPerson = new Person(firstName, lastName);System.out.println("Converting (" + person + ") into ("+ transformedPerson + ")");return transformedPerson;}}

最后,运行这个demo的前提是你要把spring batch的数据库配置好,具体的sql文件在spring batch core jar包中,还有数据源文件,要放在resources目录中。。

AppMain.java启动该demo

package com.lyx.batch;import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.JobParametersInvalidException;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class AppMain {public static void main(String[] args)throws JobExecutionAlreadyRunningException, JobRestartException,JobInstanceAlreadyCompleteException, JobParametersInvalidException {@SuppressWarnings("resource")ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:spring-batch2.xml" });JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();Job job = (Job) context.getBean("sampleJob");JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");JobExecution result = launcher.run(job,jobParametersBuilder.toJobParameters());ExitStatus es = result.getExitStatus();if (es.getExitCode().equals(ExitStatus.COMPLETED.getExitCode())) {System.out.println("任务正常完成");} else {System.out.println("任务失败,exitCode=" + es.getExitCode());}}
}

如果没有意外的话,会在数据库中看到相应的结果。

在该demo的基础上可以 试验spring batch的各种特性,可以进一步探索spring batch。

==========END==========

转载于:https://my.oschina.net/xinxingegeya/blog/340302

Spring Batch_官网DEMO实现相关推荐

  1. Spring Boot的学习之路(02):和你一起阅读Spring Boot官网

    官网是我们学习的第一手资料,我们不能忽视它.却往往因为是英文版的,我们选择了逃避它,打开了又关闭. 我们平常开发学习中,很少去官网上看.也许学完以后,我们连官网长什么样子,都不是很清楚.所以,我们在开 ...

  2. Spring AOP官网学习

    Spring AOP官网学习 5.1 AOP概念 让我们从定义一些核心的AOP概念和术语开始.这些术语并不是spring特有的.不幸的是,AOP术语不是特别直观. 1.Aspect(方面):跨多个类的 ...

  3. Java 银联支付官网demo测试及项目整合代码

    银联支付(网关支付B2C) 一.测试官网demo a)下载官网开发包,导入eclipse等待修改(下载的开发包没有servlet jar包自己在Tomcat找一个) b)进入银联官网账户https:/ ...

  4. combobox 怎么实现对listview的类别查询_Flutter实战之独立实现官网Demo单词收藏Demo

    概述 这是一次独立尝试,即独立完成实现Flutter文档第一个项目的最终效果,实现目标即首页为一个可无限滚动的单词列表,点击单词右边的小心心即可收藏或者取消收藏,可以在右上角的列表页查看收藏的单词,自 ...

  5. kurento 6.6.0 安装部署 + 运行官网demo

    文章所有均在VirtualBox+Ubuntu14.04上进行的. 环境和工具:Java 8.Maven 3.5.0.Node.js 0.10.48.Bower.git. 环境和工具不同,不保证能够正 ...

  6. 2、spring的官网

    1.spring官网地址 https://spring.io 2.官网名词解释 ·Microsevices:微服务 ·Reactive:反应式编程 ·Cloud:云服务 ·Web apps:web开发 ...

  7. 【已解决】海康威视MFC综合示例(C++ 官网Demo)采用VS2019编译异常如何解决?

    采用VS2019编译运行海康威视MFC综合示例Demo 一.文章背景: 二.操作步骤: 1.海康威视设备网络SDK下载: 2.VS2019 MFC开发环境配置: 3.MFC综合示例编译运行: 三.小结 ...

  8. 低代码开发之微搭实现企业官网demo

    目录 前言 搭建微官网 1.创建应用 2.选择模板 ​编辑3.新建后模板demo 前言 前面一篇了解了新星计划低代码,学习了关于腾讯云微搭的界面及工具的分区.今天,我们来看一下具体的的使用.首先来看一 ...

  9. 微前端--无界方案之官网demo操作说明

    下载运行 deom下载 官方demo在GitHub(访问有问题,需要设置,本人未设置) 链接:https://github.com/Tencent/wujie (别处给的,也能用) pnpm下载 其中 ...

最新文章

  1. java代码如何写出打印_java - 为什么这个代码向后写,打印“Hello World!”
  2. Android 应用程序 降低耗电量的一些思路
  3. Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image acquisi
  4. 如何新建分支上传_Git分支策略及操作演示1|IDCF FDCC认证学员作品
  5. python中ioerror怎么解决_Python IOError错误异常原因|python基础教程|python入门|python教程...
  6. web worker的介绍和使用
  7. WPF MVVM 弹框之等待框
  8. OpenShift 4 - 基于CPU负载和网络负载的HPA
  9. java8与hibernate_Hibernate 使用java8 LocalDateTime 注意事项
  10. #pragma comment(lib,ws2_32.lib)
  11. 8.1 段子中“酷毙”了的IT行业——《逆袭大学》连载
  12. 拼多多批发是什么?常见的问题有哪些?
  13. html简洁漂亮的个人简历,个人主页,个人简介网页版(源码)
  14. 用C语言编写的骂人的软件,“骂人软件”再智能 暴力永远是暴力
  15. php单页菜单,纯CSS3单页切换导航菜单界面设计
  16. util-caleAge 计算年龄
  17. 《微信公众平台应用开发实战(第2版)》一1.1 微信公众账号的注册
  18. 机械臂运动学入门(二)
  19. android wms布局过程,深入理解WMS
  20. 哪些浙大MEM提前批面试的申请者材料容易被刷?

热门文章

  1. MyBatis基于注解的使用
  2. 后台判断ajax请求的请求后字段 。
  3. 省选专练(学习)可持久化Trie树(BZOJ3261)
  4. HA总结:AWS 网络连接
  5. Java线程池 源码分析
  6. JavaScript初步入门
  7. linux 知识汇总
  8. JS中setTimeout()的使用方法具体解释
  9. windows下用easybcd引导ubuntu出现grub的解决方案
  10. SQL Server服务器名称填写IP不能访问问题解决