Created
April 24, 2014 15:03
-
-
Save gnosis23/11258003 to your computer and use it in GitHub Desktop.
spring-batch compositeWriter sample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package batch; | |
import entity.TblReport; | |
import entity.TblReportExample; | |
import mapper.TblReportMapper; | |
import org.springframework.batch.item.ItemWriter; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* Created with IntelliJ IDEA. | |
* User: bohao | |
* Date: 4/24/0024 | |
*/ | |
public class CompositeWriter implements ItemWriter<TblReport> { | |
ItemWriter<TblReport> itemWriter1; | |
ItemWriter<TblReport> itemWriter2; | |
protected TblReportMapper mapper; | |
// done in process better | |
public void write(List<? extends TblReport> items) throws Exception { | |
List<TblReport> inserts = new ArrayList<TblReport>(); | |
List<TblReport> updates = new ArrayList<TblReport>(); | |
for(TblReport re : items) { | |
TblReportExample example = new TblReportExample(); | |
example.createCriteria().andClicksEqualTo(re.getClicks()); | |
List<TblReport> reports = mapper.selectByExample(example); | |
if(reports.isEmpty()) { | |
inserts.add(re); | |
} | |
else { | |
updates.add(re); | |
} | |
} | |
itemWriter1.write(inserts); | |
itemWriter2.write(updates); | |
} | |
public void setDelegate1(ItemWriter<TblReport> itemWriter){ | |
this.itemWriter1 = itemWriter; | |
} | |
public void setDelegate2(ItemWriter<TblReport> itemWriter) { | |
this.itemWriter2 = itemWriter; | |
} | |
public void setMapper(TblReportMapper mapper) { | |
this.mapper = mapper; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<beans xmlns="http://www.springframework.org/schema/beans" | |
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.xsd"> | |
<!-- stored job-metadata in database --> | |
<bean id="jobRepository" | |
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> | |
<property name="dataSource" ref="dataSource" /> | |
<property name="transactionManager" ref="transactionManager" /> | |
<property name="databaseType" value="mysql" /> | |
</bean> | |
<bean id="jobLauncher" | |
class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> | |
<property name="jobRepository" ref="jobRepository" /> | |
</bean> | |
</beans> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<beans xmlns="http://www.springframework.org/schema/beans" | |
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-3.2.xsd | |
http://www.springframework.org/schema/jdbc | |
http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd"> | |
<!-- connect to database --> | |
<bean id="dataSource" | |
class="org.springframework.jdbc.datasource.DriverManagerDataSource"> | |
<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="1111" /> | |
</bean> | |
<bean id="transactionManager" | |
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" /> | |
<!-- create job-meta tables automatically --> | |
<jdbc:initialize-database data-source="dataSource"> | |
<jdbc:script location="classpath:org/springframework/batch/core/schema-drop-mysql.sql" /> | |
<jdbc:script location="classpath:org/springframework/batch/core/schema-mysql.sql" /> | |
</jdbc:initialize-database> | |
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> | |
<property name="dataSource" ref="dataSource" /> | |
<property name="mapperLocations" value="classpath*:mapper/*.xml" /> | |
</bean> | |
<bean id="reportMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> | |
<property name="mapperInterface" value="mapper.TblReportMapper" /> | |
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> | |
</bean> | |
</beans> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<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.xsd | |
http://www.springframework.org/schema/batch | |
http://www.springframework.org/schema/batch/spring-batch.xsd"> | |
<import resource="classpath*:config/context.xml" /> | |
<import resource="classpath*:config/database.xml" /> | |
<bean id="report" class="entity.TblReport" scope="prototype" /> | |
<batch:job id="reportJob"> | |
<batch:step id="step1"> | |
<batch:tasklet> | |
<batch:chunk reader="cvsFileItemReader" writer="compositeWriter" | |
commit-interval="2"> | |
</batch:chunk> | |
</batch:tasklet> | |
</batch:step> | |
</batch:job> | |
<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> | |
<property name="resource" value="classpath:csv/report.csv" /> | |
<property name="lineMapper"> | |
<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="date,impressions,clicks,earning" /> | |
</bean> | |
</property> | |
<property name="fieldSetMapper"> | |
<bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"> | |
<property name="prototypeBeanName" value="report" /> | |
</bean> | |
</property> | |
</bean> | |
</property> | |
</bean> | |
<bean id="compositeWriter" class="batch.CompositeWriter"> | |
<property name="mapper" ref="reportMapper" /> | |
<property name="delegate1" ref="mysqlItemWriter" /> | |
<property name="delegate2" ref="updateItemWriter" /> | |
</bean> | |
<bean id="mysqlItemWriter" | |
class="org.springframework.batch.item.database.JdbcBatchItemWriter"> | |
<property name="dataSource" ref="dataSource" /> | |
<property name="sql"> | |
<value> | |
<![CDATA[ | |
insert into RAW_REPORT(DATE,IMPRESSIONS,CLICKS,EARNING) | |
values (:date, :impressions, :clicks, :earning) | |
]]> | |
</value> | |
</property> | |
<!-- It will take care matching between object property and sql name parameter --> | |
<property name="itemSqlParameterSourceProvider" ref="paramsProvider"/> | |
</bean> | |
<bean id="updateItemWriter" | |
class="org.springframework.batch.item.database.JdbcBatchItemWriter"> | |
<property name="dataSource" ref="dataSource" /> | |
<property name="sql"> | |
<value> | |
<![CDATA[ | |
update raw_report | |
set date=:date, impressions=:impressions, earning=:earning | |
where clicks = :clicks | |
]]> | |
</value> | |
</property> | |
<!-- It will take care matching between object property and sql name parameter --> | |
<property name="itemSqlParameterSourceProvider" ref="paramsProvider"/> | |
</bean> | |
<bean id="paramsProvider" | |
class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" /> | |
</beans> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<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>batch123</groupId> | |
<artifactId>batch-core</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<properties> | |
<jdk.version>1.6</jdk.version> | |
<spring.version>3.2.8.RELEASE</spring.version> | |
<spring.batch.version>2.2.6.RELEASE</spring.batch.version> | |
<mysql.driver.version>5.1.25</mysql.driver.version> | |
</properties> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.mybatis.generator</groupId> | |
<artifactId>mybatis-generator-maven-plugin</artifactId> | |
<version>1.3.0</version> | |
</plugin> | |
</plugins> | |
</build> | |
<dependencies> | |
<dependency> | |
<groupId>org.mybatis</groupId> | |
<artifactId>mybatis-spring</artifactId> | |
<version>1.2.2</version> | |
</dependency> | |
<dependency> | |
<groupId>org.mybatis</groupId> | |
<artifactId>mybatis</artifactId> | |
<version>3.2.5</version> | |
</dependency> | |
<!-- Spring Core --> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-core</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<!-- Spring jdbc, for database --> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-jdbc</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<!-- Spring Batch dependencies --> | |
<dependency> | |
<groupId>org.springframework.batch</groupId> | |
<artifactId>spring-batch-core</artifactId> | |
<version>${spring.batch.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.batch</groupId> | |
<artifactId>spring-batch-infrastructure</artifactId> | |
<version>${spring.batch.version}</version> | |
</dependency> | |
<!-- MySQL database driver --> | |
<dependency> | |
<groupId>mysql</groupId> | |
<artifactId>mysql-connector-java</artifactId> | |
<version>${mysql.driver.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>4.11</version> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is it Possible for you to write this CompositeItemWriter configurations in java annotation based configurations??