2014-09-19 3 views
1

Есть ли лучший способ загрузить sql из файловой системы для ввода в JDBCCursorItemReader. Я хочу загрузить sql-запрос из файлов вместо hardcoding в файл конфигурации.Spring Batch JDBCCursorItemReader

//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); 

    } 
} 
+0

Что случилось с тем, как вы это сделали? этот правильный путь. – Elbek

+0

Вы правы, чтобы подозревать, что вам не нужно расширять itemReader, чтобы делать такие вещи. как насчет http://stackoverflow.com/a/25557773/217324? если вам нужна поддержка именованных параметров, то это немного больше, я делаю это с FactoryBean, который возвращает namedParameterPreparedStatementSetter. –

+0

@NathanHughes - Не могли бы вы объяснить, почему я не должен переопределять метод –

ответ

1

Использование весны 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 свойство, вы должны быть хорошо идти.

+0

Если мои запросы довольно длинные, то их трудно поддерживать в файле свойств. –

+0

Какой другой тип файла вы планируете использовать для их хранения? –

+0

Я думал о своих запросах в файлах .sql и загружал их динамически. –

Смежные вопросы