adding java based spring batch configuration
This commit is contained in:
parent
c2576ca3f4
commit
cd3f3d7551
@ -12,7 +12,7 @@
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<spring.version>4.0.2.RELEASE</spring.version>
|
||||
<spring.version>4.2.0.RELEASE</spring.version>
|
||||
<spring.batch.version>3.0.5.RELEASE</spring.batch.version>
|
||||
<sqlite.version>3.8.11.2</sqlite.version>
|
||||
</properties>
|
||||
@ -34,7 +34,6 @@
|
||||
<artifactId>spring-jdbc</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.batch</groupId>
|
||||
<artifactId>spring-batch-core</artifactId>
|
||||
|
@ -1,17 +1,27 @@
|
||||
package org.baeldung.spring_batch_intro;
|
||||
|
||||
import javax.swing.Spring;
|
||||
|
||||
import org.springframework.batch.core.Job;
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
import org.springframework.batch.core.JobParameters;
|
||||
import org.springframework.batch.core.launch.JobLauncher;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
public class App {
|
||||
public static void main(String[] args) {
|
||||
// Spring Java config
|
||||
AnnotationConfigApplicationContext context = new
|
||||
AnnotationConfigApplicationContext();
|
||||
context.register(SpringConfig.class);
|
||||
context.register(SpringBatchConfig.class);
|
||||
context.refresh();
|
||||
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"/spring-batch-intro.xml");
|
||||
// Spring xml config
|
||||
// ApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
// "spring-batch-intro.xml");
|
||||
|
||||
JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
|
||||
Job job = (Job) context.getBean("firstBatchJob");
|
||||
|
@ -0,0 +1,92 @@
|
||||
package org.baeldung.spring_batch_intro;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.text.ParseException;
|
||||
|
||||
import org.baeldung.spring_batch_intro.model.Transaction;
|
||||
import org.baeldung.spring_batch_intro.service.CustomItemProcessor;
|
||||
import org.baeldung.spring_batch_intro.service.RecordFieldSetMapper;
|
||||
import org.springframework.batch.core.Job;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
|
||||
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
|
||||
import org.springframework.batch.item.ItemProcessor;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.UnexpectedInputException;
|
||||
import org.springframework.batch.item.file.FlatFileItemReader;
|
||||
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
|
||||
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
|
||||
import org.springframework.batch.item.xml.StaxEventItemWriter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.oxm.Marshaller;
|
||||
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
|
||||
|
||||
public class SpringBatchConfig {
|
||||
@Autowired
|
||||
private JobBuilderFactory jobs;
|
||||
|
||||
@Autowired
|
||||
private StepBuilderFactory steps;
|
||||
|
||||
@Value("input/record.csv")
|
||||
private Resource inputCsv;
|
||||
|
||||
@Value("file:xml/output.xml")
|
||||
private Resource outputXml;
|
||||
|
||||
@Bean
|
||||
public ItemReader<Transaction> itemReader()
|
||||
throws UnexpectedInputException, ParseException, Exception {
|
||||
FlatFileItemReader<Transaction> reader = new FlatFileItemReader<Transaction>();
|
||||
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
|
||||
String[] tokens = { "username", "userid", "transactiondate", "amount" };
|
||||
tokenizer.setNames(tokens);
|
||||
reader.setResource(inputCsv);
|
||||
DefaultLineMapper<Transaction> lineMapper = new DefaultLineMapper<Transaction>();
|
||||
lineMapper.setLineTokenizer(tokenizer);
|
||||
lineMapper.setFieldSetMapper(new RecordFieldSetMapper());
|
||||
reader.setLineMapper(lineMapper);
|
||||
return reader;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ItemProcessor<Transaction, Transaction> itemProcessor() {
|
||||
return new CustomItemProcessor();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ItemWriter<Transaction> itemWriter(Marshaller marshaller)
|
||||
throws MalformedURLException {
|
||||
StaxEventItemWriter<Transaction> itemWriter = new StaxEventItemWriter<Transaction>();
|
||||
itemWriter.setMarshaller(marshaller);
|
||||
itemWriter.setRootTagName("transactionRecord");
|
||||
itemWriter.setResource(outputXml);
|
||||
return itemWriter;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Marshaller marshaller() {
|
||||
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
|
||||
marshaller.setClassesToBeBound(new Class[] { Transaction.class });
|
||||
return marshaller;
|
||||
}
|
||||
|
||||
@Bean
|
||||
protected Step step1(ItemReader<Transaction> reader,
|
||||
ItemProcessor<Transaction, Transaction> processor,
|
||||
ItemWriter<Transaction> writer) {
|
||||
return steps.get("step1").<Transaction, Transaction> chunk(10)
|
||||
.reader(reader).processor(processor).writer(writer).build();
|
||||
}
|
||||
|
||||
@Bean(name = "firstBatchJob")
|
||||
public Job job(@Qualifier("step1") Step step1) {
|
||||
return jobs.get("firstBatchJob").start(step1).build();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package org.baeldung.spring_batch_intro;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
||||
import org.springframework.batch.core.launch.JobLauncher;
|
||||
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
|
||||
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
|
||||
@Configuration
|
||||
@EnableBatchProcessing
|
||||
public class SpringConfig {
|
||||
|
||||
@Value("org/springframework/batch/core/schema-drop-sqlite.sql")
|
||||
private Resource dropReopsitoryTables;
|
||||
|
||||
@Value("org/springframework/batch/core/schema-sqlite.sql")
|
||||
private Resource dataReopsitorySchema;
|
||||
|
||||
@Bean
|
||||
public DataSource dataSource() {
|
||||
DriverManagerDataSource dataSource = new DriverManagerDataSource();
|
||||
dataSource.setDriverClassName("org.sqlite.JDBC");
|
||||
dataSource.setUrl("jdbc:sqlite:repository.sqlite");
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DataSourceInitializer dataSourceInitializer(DataSource dataSource)
|
||||
throws MalformedURLException {
|
||||
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
|
||||
|
||||
databasePopulator.addScript(dropReopsitoryTables);
|
||||
databasePopulator.addScript(dataReopsitorySchema);
|
||||
databasePopulator.setIgnoreFailedDrops(true);
|
||||
|
||||
DataSourceInitializer initializer = new DataSourceInitializer();
|
||||
initializer.setDataSource(dataSource);
|
||||
initializer.setDatabasePopulator(databasePopulator);
|
||||
|
||||
return initializer;
|
||||
}
|
||||
|
||||
private JobRepository getJobRepository() throws Exception {
|
||||
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
|
||||
factory.setDataSource(dataSource());
|
||||
factory.setTransactionManager(getTransactionManager());
|
||||
factory.afterPropertiesSet();
|
||||
return (JobRepository) factory.getObject();
|
||||
}
|
||||
|
||||
private PlatformTransactionManager getTransactionManager() {
|
||||
return new ResourcelessTransactionManager();
|
||||
}
|
||||
|
||||
public JobLauncher getJobLauncher() throws Exception {
|
||||
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
|
||||
jobLauncher.setJobRepository(getJobRepository());
|
||||
jobLauncher.afterPropertiesSet();
|
||||
return jobLauncher;
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +1,12 @@
|
||||
package org.baeldung.spring_batch_intro.service;
|
||||
|
||||
|
||||
import org.baeldung.spring_batch_intro.model.Transaction;
|
||||
import org.springframework.batch.item.ItemProcessor;
|
||||
|
||||
public class CustomItemProcessor implements ItemProcessor<Transaction, Transaction> {
|
||||
public class CustomItemProcessor implements
|
||||
ItemProcessor<Transaction, Transaction> {
|
||||
|
||||
public Transaction process(Transaction item) throws Exception {
|
||||
|
||||
System.out.println("Processing..." + item);
|
||||
return item;
|
||||
}
|
||||
|
@ -3,23 +3,26 @@
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/batch
|
||||
http://www.springframework.org/schema/batch/spring-batch-3.0.xsd
|
||||
http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
||||
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
|
||||
">
|
||||
|
||||
<import resource="spring.xml" />
|
||||
|
||||
<bean id="record" class="org.baeldung.spring_batch_intro.model.Transaction"></bean>
|
||||
|
||||
<bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
|
||||
<bean id="itemReader"
|
||||
class="org.springframework.batch.item.file.FlatFileItemReader">
|
||||
|
||||
<property name="resource" value="input/record.csv" />
|
||||
|
||||
<property name="lineMapper">
|
||||
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
|
||||
<bean
|
||||
class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
|
||||
<property name="lineTokenizer">
|
||||
<bean
|
||||
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
|
||||
<property name="names" value="username,userid,transactiondate,amount" />
|
||||
<property name="names"
|
||||
value="username,userid,transactiondate,amount" />
|
||||
</bean>
|
||||
</property>
|
||||
<property name="fieldSetMapper">
|
||||
@ -34,7 +37,8 @@
|
||||
<bean id="itemProcessor"
|
||||
class="org.baeldung.spring_batch_intro.service.CustomItemProcessor" />
|
||||
|
||||
<bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
|
||||
<bean id="itemWriter"
|
||||
class="org.springframework.batch.item.xml.StaxEventItemWriter">
|
||||
<property name="resource" value="file:xml/output.xml" />
|
||||
<property name="marshaller" ref="recordMarshaller" />
|
||||
<property name="rootTagName" value="transactionRecord" />
|
||||
@ -43,7 +47,8 @@
|
||||
<bean id="recordMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
|
||||
<property name="classesToBeBound">
|
||||
<list>
|
||||
<value>org.baeldung.spring_batch_intro.model.Transaction</value>
|
||||
<value>org.baeldung.spring_batch_intro.model.Transaction
|
||||
</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
@ -2,9 +2,9 @@
|
||||
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
||||
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
|
||||
http://www.springframework.org/schema/jdbc
|
||||
http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
|
||||
http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd">
|
||||
|
||||
<!-- connect to SQLite database -->
|
||||
<bean id="dataSource"
|
||||
@ -17,7 +17,8 @@
|
||||
|
||||
<!-- create job-meta tables automatically -->
|
||||
<jdbc:initialize-database data-source="dataSource">
|
||||
<jdbc:script location="org/springframework/batch/core/schema-drop-sqlite.sql" />
|
||||
<jdbc:script
|
||||
location="org/springframework/batch/core/schema-drop-sqlite.sql" />
|
||||
<jdbc:script location="org/springframework/batch/core/schema-sqlite.sql" />
|
||||
</jdbc:initialize-database>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user