一、JdbcPagingItemReader
Spring Batch框架提供了对JDBC分页读取支持的组件JdbcPagingItemReader。JdbcPaginItemReader实现ItemReader接口,核心作用是将数据库中记录通过分页的方式转换为Java对象。在JdbcPagingItemReader将数据库记录转换为Java对象是主要有两步工作:首先根据SimpleJdbcTemplate与PagingQueryProvider从数据库中根据分页的大小获取结果集ResultSet;其次使用RowMapper将结果集ResultSet转换为Java对象,具体步骤见下:
JdbcPagingItemReader关键接口、类说明:
关键类 | 说明 |
---|---|
DataSource | 提供读取数据库的数据源信息 |
SimpleJdbcTemplate | 提供标准的Spring的jdbc模板,根据分页信息查询数据库,返回排序后的结果集ResultSet |
PagingQueryProvider | 根据分页信息生成每次需要查询的SQL语句 |
RowMapper | 负责将结果集ResultSet转换为Java对象 |
JdbcPagingItemReader关键属性:
属性 | 类型 | 说明 |
---|---|---|
dataSource | DataSource | 数据源,通过该属性指定使用的数据库信息 |
fetchSize | int | 设置ResultSet每次向数据库取的行数;setFetchSize的意思是当调用rs.next时,ResultSet会一次性从服务器上取多少行数据回来,这样在下次rs.next时,可以直接从内存中取出数据而不需要网络交互,提高了效率。 默认值:-1 |
queryProvider | PagingQueryProvider | 分页查询SQL语句生成器,负责根据分页信息生成每次需要执行的SQL语句 |
parameterValues | Map<String,Object> | 设置定义的SQL语句中的参数 |
rowMapper | RowMapper | 将结果集ResultSet转换为指定的Pojo对象类;需要实现RowMapper接口,默认可以使用BeanPropertyRowMapper; |
pageSize | int | 分页大小 默认值:10 |
Spring Batch框架为了支持PagingQueryProvider,根据不同的数据库类型提供多种实现,为了便于开发者屏蔽不同的数据库类型,Spring Batch框架提供了友好的工厂类SqlPagingQueryProviderFactoryBean为不同的数据库类提供PagingQueryProvider的实现类。
SqlPagingQueryProviderFactoryBean关键属性:
属性 | 类型 | 说明 |
---|---|---|
dataSource | DataSource | 数据源,通过该属性指定使用的数据库信息 |
databaseType | String | 指定数据库的类型,如果不显示指定该类型,则自动通过dataSource属性获取数据库的信息 |
ascending | Boolean | 查询语句是否是升序。 默认值:true |
fromClause | String | 定义查询语句的from部分 |
selectClause | String | 定义查询语句的select部分 |
sortKey | String | 定义查询语句排序的关键字段 |
whereClause | String | 定义查询语句的where字段 |
使用JdbcPagingItemReader至少需要配置dataSource、queryProvider、rowMapper三个属性。
二、项目举例
1.项目框架
2.代码实现
D:\ideaWorkplace(旧)\spring-batch\src\main\java\com\xj\demo32\BatchMain.java:
D:\ideaWorkplace(旧)\spring-batch\src\main\java\com\xj\demo32\CreditBill.java:
D:\ideaWorkplace(旧)\spring-batch\src\main\java\com\xj\demo32\CreditBillProcessor.java:
D:\ideaWorkplace(旧)\spring-batch\src\main\java\com\xj\demo32\CreditBillRowMapper.java:
D:\ideaWorkplace(旧)\spring-batch\src\main\java\com\xj\demo32\DummyCreditItemWriter.java:
D:\ideaWorkplace(旧)\spring-batch\src\main\resources\demo32\job\demo32-job.xml:
D:\ideaWorkplace(旧)\spring-batch\src\main\resources\demo32\job\demo32-jobContext.xml:
D:\ideaWorkplace(旧)\spring-batch\src\main\resources\demo32\db\create-tables-mysql.sql:
D:\ideaWorkplace(旧)\spring-batch\src\main\resources\properties\batch-mysql.properties:
3.运行结果