Spring Batch 例子: 从数据库导出分隔符文件
来源:互联网 发布:l28t手环软件 编辑:程序博客网 时间:2024/06/06 04:15
– Start
假设我们有如下表。
CREATE TABLE PEOPLE( ID NUMBER(8,0), NAME VARCHAR2(30));
我们需要把表中的数据导出到如下的分隔符文件中,有标题行和结尾行。
id|name1|zhangsan2|lisi3|wangwuTotal line|3
让我们来看看代码吧。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:batch="http://www.springframework.org/schema/batch" xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 定义 dataSource --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="hr" /> <property name="password" value="123456" /> </bean> <!-- 定义 jdbc 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 定义 jobRepository, 用来持久化 job --> <batch:job-repository id="jobRepository" data-source="dataSource" transaction-manager="transactionManager"/> <!-- 定义 jobLauncher, 来用运行 job --> <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> <property name="jobRepository" ref="jobRepository" /> </bean> <!-- 定义 job --> <batch:job id="extractFileJob" job-repository="jobRepository"> <batch:step id="extractFileStep"> <batch:tasklet> <batch:chunk reader="extractFileReader" processor="extractFileProcessor" writer="extractFileWriter" commit-interval="10"/> </batch:tasklet> </batch:step> </batch:job> <!-- 定义 reader --> <bean id="extractFileReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step"> <property name="dataSource" ref="dataSource"/> <property name="sql" value="select * from people"/> <property name="rowMapper"> <bean class="shangbo.springbatch.example4.PeopleRowMapper"/> </property> </bean> <!-- 定义 processor --> <bean id="extractFileProcessor" class="org.springframework.batch.item.support.PassThroughItemProcessor" scope="step"/> <!-- 定义 writer --> <bean id="extractFileWriter" class="shangbo.springbatch.example4.MyFileItemWriter" scope="step"> <property name="header" value="id|name"/> <property name="delegate" ref="targetFileWriter"/> </bean> <bean id="targetFileWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step"> <!-- 文件编码方式 --> <property name="encoding" value="UTF-8" /> <property name="resource" value="file:///D:/0_Shangbo/Dev/Workspace/people_#{jobParameters['business_date']}.txt" /> <property name="headerCallback" ref="extractFileWriter"/> <property name="footerCallback" ref="extractFileWriter"/> <property name="lineAggregator"> <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator"> <property name="delimiter" value="|"/> <property name="fieldExtractor"> <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> <property name="names" value="id,name"/> </bean> </property> </bean> </property> </bean></beans>
package shangbo.springbatch.example4;public class People implements java.io.Serializable{ private static final long serialVersionUID = 8904705906008476310L; private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
package shangbo.springbatch.example4;import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class PeopleRowMapper implements RowMapper<People> { @Override public People mapRow(ResultSet rs, int rowNum) throws SQLException { People p = new People(); p.setId(rs.getInt(1)); p.setName(rs.getString(2)); return p; }}
package shangbo.springbatch.example4;import java.io.IOException;import java.io.Writer;import java.util.List;import org.springframework.batch.item.ExecutionContext;import org.springframework.batch.item.ItemStreamException;import org.springframework.batch.item.ItemStreamWriter;import org.springframework.batch.item.file.FlatFileFooterCallback;import org.springframework.batch.item.file.FlatFileHeaderCallback;public class MyFileItemWriter implements FlatFileFooterCallback, FlatFileHeaderCallback, ItemStreamWriter<People> { private ItemStreamWriter<People> delegate; private String header; private int totalLine = 0; // Override from FlatFileHeaderCallback @Override public void writeHeader(Writer writer) throws IOException { writer.write(header); } // Override from FlatFileFooterCallback @Override public void writeFooter(Writer writer) throws IOException { writer.write("Total line|" + totalLine); } // Override from ItemStreamWriter @Override public void write(List<? extends People> items) throws Exception { totalLine += items.size(); delegate.write(items); } @Override public void open(ExecutionContext executionContext) throws ItemStreamException { delegate.open(executionContext); } @Override public void update(ExecutionContext executionContext) throws ItemStreamException { delegate.update(executionContext); } @Override public void close() throws ItemStreamException { delegate.close(); } // Setter public void setDelegate(ItemStreamWriter<People> delegate) { this.delegate = delegate; } public void setHeader(String header) { this.header = header; }}
package shangbo.springbatch.example4;import java.util.HashMap;import java.util.Map;import org.springframework.batch.core.Job;import org.springframework.batch.core.JobParameter;import org.springframework.batch.core.JobParameters;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 App { public static void main(String[] args) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException { ApplicationContext context = new ClassPathXmlApplicationContext("shangbo/springbatch/example4/ExtractFileJob.xml"); // job 和 job 参数 Map<String,JobParameter> parameters = new HashMap<>(); parameters.put("business_date", new JobParameter("20170719")); JobParameters jobParameters = new JobParameters(parameters); Job job = context.getBean(Job.class); // 运行 job JobLauncher jobLauncher = context.getBean(JobLauncher.class); jobLauncher.run(job, jobParameters); }}
– 更多参见:Spring Batch 精萃
– 声 明:转载请注明出处
– Last Updated on 2017-07-19
– Written by ShangBo on 2017-07-19
– End
阅读全文
0 0
- Spring Batch 例子: 从数据库导出分隔符文件
- Spring Batch 例子: 导入分隔符文件到数据库
- Spring Batch 例子: 从数据库导出定长文件
- Spring Batch 例子: 导入定长文件到数据库
- Spring Batch 入门例子
- spring batch 例子
- spring batch批处理分区读取数据库的例子
- Spring Batch从csv文件读取再生成csv文件
- 关于读取Excel文件数据到数据库,以及从数据库导出数据到Excel的例子
- Spring Batch 从数据库提取记录存放在text中
- 从数据库导出xml文件
- Spring batch 2.0例子(lineMapper)
- spring batch批处理框架把csv文件读入数据库
- Spring Batch示例: 读取CSV文件并写入MySQL数据库
- spring batch快速学习例子(spring batch samples)
- Spring batch 之操作数据库
- 从数据库中导入导出文件
- 从数据库导出到.csv文件方法
- C#编程入门_反射_19
- C#编程入门_委托、事件、Lambda表达式_20
- C#编程入门_网络编程_21
- DAY 42 多线程锁机制
- Sass开发 – Ruby安装出错解决办法:淘宝网镜像 RubyGems
- Spring Batch 例子: 从数据库导出分隔符文件
- 一事无成的程序员,究竟差在哪里?
- WINDOWS 平台APACHE模块开发环境搭建
- Unity_引擎简介_001
- Shell系列—各种括号的作用()、(())、[]、[[]]、{}
- 二分答案框架
- Linux工作站加固的6个方法
- 路径设置:初次使用python之在notepad++中直接运行python代码
- MYSQL:SQL中Group By的使用