Spring Batch JDBCCursorItemReader

时间:2014-09-19 17:54:35

标签: spring-batch

有没有更好的方法从文件系统加载sql以注入JDBCCursorItemReader。 我想从文件中加载sql查询,而不是在配置文件中加载硬编码。

//spring bean    
<bean id="jdbcReader" class="com.sample.DatabaseReader">
    <property name="sql" value="query.sql"/>
</bean>

然后我扩展了JDBCCursorItemReader

//extended cursoritemreader
class DatabaseReader extends JDBCCursorItemReader {

    //Overriden method
    @Override
    public void setSql(String fileName) {
        //file
        File f = new File(fileName);
        //read file from given path
        String query = FileCopyUtils.copyToString(f);
        //pass the query
        super.setSQL(query);

    }
}

1 个答案:

答案 0 :(得分:2)

使用Spring的PropertyPlaceHolder将SQL直接注入到阅读器中(无需为此扩展我们的阅读器)。一个例子如下:

 <bean id="jdbcItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
    <property name="dataSource" ref="dataSource" />
    <property name="rowMapper" ref="myRowMapper>
    <property name="sql" value="${batch.sql}"/>
</bean>

只要您配置了PropertiesPlaceholderConfigurer指向包含batch.sql属性的属性文件,您就应该好了。