Spring Batch: передача параметров времени выполнения для запроса в ItemReader - PullRequest
4 голосов
/ 05 декабря 2011

У меня есть программа Spring Batch, которая читает из одной базы данных и записывает в файл.

Имеется считыватель предметов, как показано ниже:

<beans:bean id="myItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
    <beans:property name="dataSource" ref="jobRepository-dataSource" />
    <beans:property name="sql" value="${dbTofileDataReadSQL}"/>
    <beans:property name="rowMapper">
        <beans:bean class="com.mypackage.MyRowMapper" />
    </beans:property>
</beans:bean>

sql это что-то вроде:

select one, two, three, four from myTable where business_date='12/12/11'

Эта строка войдет в мой файл свойств:

dbTofileDataReadSQL = select one, two, three, four from myTable where business_date='12/12/11'

Как передать эту бизнес-дату во время выполнения в считыватель элементов, чтобы она добавлялась в считыватель элементов.

Спасибо за чтение !!

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Вы можете использовать позднюю привязку с шагом шага или простой PropertyPlaceholderConfigurer

<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="path to your properties file, either classpath: ... or c:/... " />
</bean>

и если вам нужны многострочные записи в вашем файле свойств, сделайте так

# sql, multiline property with \
sql=\
SELECT \
ID, \
NAME \
FROM TEST \
ORDER BY ID

Или начиная с Spring 3, вы можете использовать SpEL:

<util:properties id="myProperties" location="..." />
...
<beans:bean ...
   <beans:property name="sql" value="#{myProperties.sql}"/>
</beans:bean>
0 голосов
/ 05 декабря 2011

Имейте местозаполнитель в вашей собственности


dbTofileDataReadSQL = select one, two, three, four from myTable where business_date={0}

И отметьте этот ответ , который показывает, как решить его во время выполнения, используя MessageFormat class

Обновление:

В Spring, если у вас есть этот файл свойств, добавленный в ваш пакет ресурсов, Вы можете получить разрешенное значение, используя ApplicationContext#getMessage


String getMessage(String code,
                  Object[] args,
                  Locale locale)
                  throws NoSuchMessageException
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...