个人网页html代码/成都网站seo性价比高
– Start
点击此处观看本系列配套视频。
假设我们有如下表。
CREATE TABLE PEOPLE
(ID NUMBER(8,0), NAME VARCHAR2(30)
);
我们需要把表中的数据导出到如下的定长文件中,有标题行和结尾行。
id name1 zhangsan2 lisi3 wangwu
Total line3
让我们来看看代码吧。
<?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.xsdhttp://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" ref="rowMapper"/></bean><bean id="rowMapper" class="org.springframework.jdbc.core.BeanPropertyRowMapper" scope="step"><constructor-arg value="shangbo.springbatch.example5.People"/></bean><!-- 定义 processor --><bean id="extractFileProcessor" class="org.springframework.batch.item.support.PassThroughItemProcessor" scope="step"/><!-- 定义 writer --><bean id="extractFileWriter" class="shangbo.springbatch.example5.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.FormatterLineAggregator"><property name="format" value="%10d%30s"/><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.example5;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.example5;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@Overridepublic void writeHeader(Writer writer) throws IOException {writer.write(header);}// Override from FlatFileFooterCallback@Overridepublic void writeFooter(Writer writer) throws IOException {writer.write("Total line" + totalLine);}// Override from ItemStreamWriter@Overridepublic void write(List<? extends People> items) throws Exception {totalLine += items.size();delegate.write(items);}@Overridepublic void open(ExecutionContext executionContext) throws ItemStreamException {delegate.open(executionContext);}@Overridepublic void update(ExecutionContext executionContext) throws ItemStreamException {delegate.update(executionContext);}@Overridepublic void close() throws ItemStreamException {delegate.close();}// Setterpublic void setDelegate(ItemStreamWriter<People> delegate) {this.delegate = delegate;}public void setHeader(String header) {this.header = header;}}
package shangbo.springbatch.example5;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/example5/ExtractFileJob.xml");// job 和 job 参数Map<String,JobParameter> parameters = new HashMap<>();parameters.put("business_date", new JobParameter("20170721"));JobParameters jobParameters = new JobParameters(parameters);Job job = context.getBean(Job.class);// 运行 jobJobLauncher jobLauncher = context.getBean(JobLauncher.class);jobLauncher.run(job, jobParameters);}
}
– 更多参见:Spring Batch 精萃
– 声 明:转载请注明出处
– Last Updated on 2017-05-17
– Written by ShangBo on 2017-07-19
– End