Java SpringBatch 3.0.3:如何为JdbcPagingItemReader查询设置自定义参数?
将自定义参数设置为Java SpringBatch 3.0.3:如何为JdbcPagingItemReader查询设置自定义参数?,java,spring,spring-batch,Java,Spring,Spring Batch,将自定义参数设置为JdbcPagingItemReaderquery的最佳方法是什么 我的自定义JdbcPagingItemReader实现: public class CustomItemReader extends JdbcPagingItemReader<Long> { public CustomItemReader(DataSource dataSource) throws Exception { SqlPagingQueryProviderFacto
JdbcPagingItemReader
query的最佳方法是什么
我的自定义JdbcPagingItemReader
实现:
public class CustomItemReader extends JdbcPagingItemReader<Long> {
public CustomItemReader(DataSource dataSource) throws Exception {
SqlPagingQueryProviderFactoryBean queryProvider = new SqlPagingQueryProviderFactoryBean();
queryProvider.setDataSource(dataSource);
queryProvider.setSelectClause("SELECT t1.id");
queryProvider.setFromClause("FROM table1 t1 LEFT JOIN table2 t2 ON t2.fk_table1_id = t1.id");
queryProvider.setWhereClause("WHERE (t1.col1 = :param1) AND ((t2.id IS NULL) OR (t2.col3 = :param2))");
queryProvider.setSortKey("t1.id");
setDataSource(dataSource);
setFetchSize(10);
setRowMapper(new RowMapper<Long>() {
@Override
public Long mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getLong(1);
}
});
setQueryProvider(queryProvider.getObject());
}
}
公共类CustomItemReader扩展了JdbcPagingItemReader{
公共CustomItemReader(DataSource DataSource)引发异常{
SqlPagingQueryProviderFactoryBean queryProvider=新SqlPagingQueryProviderFactoryBean();
queryProvider.setDataSource(数据源);
queryProvider.setSelectClause(“SELECT t1.id”);
queryProvider.setFromClause(“从t2.fk_table1_id=t1.id上的table1 t1左连接table2 t2”);
queryProvider.setWhere子句(“其中(t1.col1=:param1)和((t2.id为NULL)或(t2.col3=:param2));
queryProvider.setSortKey(“t1.id”);
setDataSource(数据源);
设置大小(10);
setRowMapper(新的RowMapper(){
@凌驾
公共长映射行(ResultSet rs,int rowNum)抛出SQLException{
返回rs.getLong(1);
}
});
setQueryProvider(queryProvider.getObject());
}
}
要将参数从作业的ExecutionContext
传递到JdbcPagingItemReader
,您需要如下配置编写器:
<bean id="itemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" scope="step">
<property name="dataSource" ref="dataSource" />
<property name="rowMapper">
<bean class="MyRowMapper" />
</property>
<property name="queryProvider">
<bean class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="sortKeys">
<map>
<entry key="t1.id" value="ASCENDING"/>
</map>
</property>
<property name="selectClause" value="SELECT t1.id" />
<property name="fromClause" value="FROM table1 t1 LEFT JOIN table2 t2 ON t2.fk_table1_id = t1.id" />
<property name="whereClause" value=""WHERE (t1.col1 = :param1) AND ((t2.id IS NULL) OR (t2.col3 = :param2))" />
</bean>
</property>
<property name="pageSize" value="10" />
<property name="parameterValues">
<map>
<entry key="param1" value="#{jobExecutionContext[param1]}" />
<entry key="param2" value="#{jobExecutionContext[param2]}" />
</map>
</property>
</bean>
首先,为什么要扩展JdbcPagingItemReader
?我想尝试覆盖更新参数,但没有找到一种方法。我希望能够为每个步骤执行设置不同的参数值。您计划如何传递它们?参数保存在作业执行上下文中。我想知道如何将参数从stepExecutionContext传递到JdbcPagingItemReader,如子句所示。