Spring Batch_DEMO_使用JdbcCursorItemReader

Spring Batch_DEMO_使用JdbcCursorItemReader


该demo主要完成的功能就是把数据从表people读出来处理加上people的desc属性然后保存到表ok_people。。

对应的People.java和PeopleDESC.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package  com.lyx.batch;
 
public  class  People {
     private  int  id;
     private  String lastName;
     private  String firstName;
 
     public  People() {
     }
 
     public  People(String firstName, String lastName) {
         this .firstName = firstName;
         this .lastName = lastName;
     }
 
     public  int  getId() {
         return  this .id;
     }
 
     public  void  setId( int  id) {
         this .id = id;
     }
 
     public  void  setFirstName(String firstName) {
         this .firstName = firstName;
     }
 
     public  String getFirstName() {
         return  this .firstName;
     }
 
     public  String getLastName() {
         return  this .lastName;
     }
 
     public  void  setLastName(String lastName) {
         this .lastName = lastName;
     }
 
     @Override
     public  String toString() {
         return  "firstName: "  this .firstName +  ", lastName: "  this .lastName;
     }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package  com.lyx.batch;
 
public  class  PeopleDESC {
     private  int  id;
     private  String lastName;
     private  String firstName;
     private  String desc;
 
     public  PeopleDESC(String lastName, String firstName, String desc) {
         super ();
         this .lastName = lastName;
         this .firstName = firstName;
         this .desc = desc;
     }
 
     public  int  getId() {
         return  this .id;
     }
 
     public  void  setId( int  id) {
         this .id = id;
     }
 
     public  void  setFirstName(String firstName) {
         this .firstName = firstName;
     }
 
     public  String getFirstName() {
         return  this .firstName;
     }
 
     public  String getLastName() {
         return  this .lastName;
     }
 
     public  void  setLastName(String lastName) {
         this .lastName = lastName;
     }
 
     @Override
     public  String toString() {
         return  "firstName: "  this .firstName +  ", lastName: "  this .lastName;
     }
 
     public  String getDesc() {
         return  this .desc;
     }
 
     public  void  setDesc(String desc) {
         this .desc = desc;
     }
 
}


对应的数据库表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE  TABLE  ok_people  (
     person_id  BIGINT  NOT  NULL  AUTO_INCREMENT,
     first_name  VARCHAR (20),
     last_name  VARCHAR (20),
     batch_desc  varchar (255),
     PRIMARY  KEY  (person_id)
);
CREATE  TABLE  people  (
     person_id  BIGINT  NOT  NULL  AUTO_INCREMENT,
     first_name  VARCHAR (20),
     last_name  VARCHAR (20),
     PRIMARY  KEY  (person_id)
);

主要过程还是配置job的reader,processor,writer,下面是配置文件中的reader,processor,wirter,如下配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
< 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-4.0.xsd
         http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd">
     
     < bean  id = "exceptionHandler"  class = "com.lyx.batch.ExceptionListener"  />
 
     < batch:step  id = "abstractStep"  abstract = "true" >
         < batch:listeners >
             < batch:listener  ref = "exceptionHandler"  />
         </ batch:listeners >
     </ batch:step >
     < bean  id = "abstractCursorReader"  abstract = "true"
         class = "org.springframework.batch.item.database.JdbcCursorItemReader" >
         < property  name = "dataSource"  ref = "dataSource"  />
     </ bean >
 
     < batch:job  id = "addPeopleDescJob" >
         < batch:step  id = "addDescStep"  parent = "abstractStep" >
             < batch:tasklet >
                 < batch:chunk  reader = "peopleAddDescReader"  processor = "addDescProcessor"
                     writer = "addDescPeopleWriter"  commit-interval = "2" />
             </ batch:tasklet >
         </ batch:step >
     </ batch:job >
     < bean  id = "peopleAddDescReader"  parent = "abstractCursorReader"
         scope = "step" >
         < property  name = "sql" >
             < value > <![CDATA[select first_name ,last_name from people where 
             first_name like ? or last_name like ?]]> </ value >
         </ property >
         < property  name = "rowMapper"  ref = "peopleRowMapper"  />
         < property  name = "preparedStatementSetter"  ref = "preparedStatementSetter"  />
         < property  name = "fetchSize"  value = "20"  />
     </ bean >
     < bean  id = "peopleRowMapper"  class = "com.lyx.batch.PeopleRowMapper"  />
     < bean  id = "preparedStatementSetter"  class = "com.lyx.batch.PeoplePreparedStatementSetter"  />
     < bean  id = "addDescProcessor"  class = "com.lyx.batch.AddPeopleDescProcessor"  />
     < bean  id = "addDescPeopleWriter"  class = "com.lyx.batch.AddDescPeopleWriter"  >
         < property  name = "dataSource"  ref = "dataSource" />
     </ bean >
     
     <!--tomcat jdbc pool数据源配置 -->
     < bean  id = "dataSource"  class = "org.apache.tomcat.jdbc.pool.DataSource"
         destroy-method = "close" >
         < property  name = "poolProperties" >
             < bean  class = "org.apache.tomcat.jdbc.pool.PoolProperties" >
                 < 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 = "034039"  />
             </ bean >
         </ property >
     </ bean >
     
     <!-- spring batch 配置jobRepository -->
     < batch:job-repository  id = "jobRepository"
         data-source = "dataSource"  transaction-manager = "transactionManager"
         isolation-level-for-create = "REPEATABLE_READ"  table-prefix = "BATCH_"
         max-varchar-length = "1000"  />
     <!-- spring的事务管理器 -->
     < bean  id = "transactionManager"
         class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
         < property  name = "dataSource"  ref = "dataSource"  />
     </ bean >
 
     <!-- batch luncher -->
     < bean  id = "jobLauncher"
         class = "org.springframework.batch.core.launch.support.SimpleJobLauncher" >
         < property  name = "jobRepository"  ref = "jobRepository"  />
     </ bean >
</ beans >

对应的类:


PeopleRowMapper.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package  com.lyx.batch;
 
import  java.sql.ResultSet;
import  java.sql.SQLException;
 
import  org.springframework.jdbc.core.RowMapper;
 
public  class  PeopleRowMapper  implements  RowMapper<People> {
 
     public  People mapRow(ResultSet rs,  int  rowNum)  throws  SQLException {
         People p =  new  People();
         p.setFirstName(rs.getString( "first_name" ));
         p.setLastName(rs.getString( "last_name" ));
         return  p;
     }
 
}


PeoplePreparedStatementSetter.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package  com.lyx.batch;
 
import  java.sql.PreparedStatement;
import  java.sql.SQLException;
 
import  org.springframework.jdbc.core.PreparedStatementSetter;
 
public  class  PeoplePreparedStatementSetter  implements  PreparedStatementSetter {
 
     public  void  setValues(PreparedStatement ps)  throws  SQLException {
         // TODO Auto-generated method stub
         ps.setString( 1 "%JOHN%" );
         ps.setString( 2 "%DOE%" );
     }
}


AddPeopleDescProcessor.java

?
1
2
3
4
5
6
7
8
9
10
11
12
package  com.lyx.batch;
 
import  org.springframework.batch.item.ItemProcessor;
 
public  class  AddPeopleDescProcessor  implements
         ItemProcessor<People, PeopleDESC> {
 
     public  PeopleDESC process(People item)  throws  Exception {
         return  new  PeopleDESC(item.getLastName(), item.getFirstName(), Thread
                 .currentThread().getName());
     }
}


AddDescPeopleWriter.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package  com.lyx.batch;
 
import  java.util.List;
 
import  javax.sql.DataSource;
 
import  org.springframework.batch.item.ItemWriter;
import  org.springframework.jdbc.core.JdbcTemplate;
 
public  class  AddDescPeopleWriter  implements  ItemWriter<PeopleDESC> {
 
     private  JdbcTemplate jdbcTemplate;
 
     public  void  setDataSource(DataSource dataSource) {
         this .jdbcTemplate =  new  JdbcTemplate(dataSource);
     }
 
     public  void  write(List<?  extends  PeopleDESC> items)  throws  Exception {
         for  (PeopleDESC peopleDESC : items) {
             this .jdbcTemplate
                     .update( "insert into ok_people (first_name, last_name, batch_desc) values (?, ?, ?)" ,
                             peopleDESC.getFirstName(),
                             peopleDESC.getLastName(), peopleDESC.getDesc());
         }
     }
 
}


===================END===================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值