Spring Batch JDBC XML
JDBC
At last entry, I explained simple Spring batch with command line argus.
As next step, let’s try MySQL(database) connection
Environment
MySQL 5.6
Create Database named test
Table is following
CREATE TABLE `test`.`user` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '', `name` VARCHAR(255) NOT NULL COMMENT '', PRIMARY KEY (`id`) COMMENT '', UNIQUE INDEX `name_UNIQUE` (`name` ASC) COMMENT '');
Preparation
Add dependencies
Codes
job.xml
Add datasource and DAO to bean
<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-2.5.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch.xsd">
<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="" />
</bean>
<bean id="transactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jdbctest" class="com.atmarkplant.batchsample.jdbc.JdbcTestDAO">
<property name="dataSource" ref="dataSource" />
</bean>
<batch:job id="datasourcetask" job-repository="jobRepository">
<batch:step id="task3">
<batchlet scope="step"
class="com.atmarkplant.batchsample.task.DataSourceTask">
<property name="jdbctest" ref="jdbctest"></property>
</batchlet>
</batch:step>
</batch:job>
</beans>
Add 2 beans. One is datasource. Prepare datasource with org.springframework.jdbc.datasource.DriverManagerDataSource
<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="" /> </bean>
This is datasource betting. By this, you can use dataSource object.
DAO
Create DAO class to access database.
From xml, dao has datasource property
public class JdbcTestDAO {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void insert(User user) {
String sql = "INSERT INTO USER (name) VALUE(?)";
Connection conn = null;
try {
conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.executeUpdate();
ps.close();
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
if (conn != null) {
try {
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
This class insert one data using JDBC.
Task
The last is task.
public class DataSourceTask implements Tasklet {
private JdbcTestDAO jdbctest;
public void setJdbctest(JdbcTestDAO jdbctest) {
this.jdbctest = jdbctest;
}
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("datasource task");
User user = new User();
user.setName("Ash");
jdbctest.insert(user);
return RepeatStatus.FINISHED;
}
}
Create DAO and execute insert method to make new record.
Run
This is almost same as the last entry
java org.springframework.batch.core.launch.support.CommandLineJobRunner job.xml datasourcetask
