簡體   English   中英

Spring Batch 3.0.3:如何為JdbcPagingItemReader查詢設置自定義參數?

[英]Spring Batch 3.0.3: How to set custom params for JdbcPagingItemReader query?

將自定義參數設置為JdbcPagingItemReader查詢的最佳方法是什么?

我的自定義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());
    }
}

要將參數從作業的ExecutionContext傳遞到JdbcPagingItemReader ,您可以按以下方式配置writer:

<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>

您可以在此處的Spring Batch示例中查看這樣的配置: https : //github.com/spring-projects/spring-batch/tree/master/spring-batch-samples

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM