Добавление метки времени к JobParameter в ItemReader Spring Batch

Не могли бы вы помочь мне добавить значение TIMESTAMP в JobParameter в Spring Batch.

Мой JDBCPageItemReader приведен ниже:

<bean id="beanSample"
    class="org.springframework.batch.item.database.JdbcPagingItemReader"
    scope="step">
    <property name="dataSource" ref="pgDataSource" />
    <property name="queryProvider">
        <bean class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
            <property name="dataSource" ref="pgDataSource" />
            <property name="selectClause" value="SELECT *" />
            <property name="fromClause" value="FROM sh.trains" />
            <property name="whereClause" value="WHERE train_type = :train_type_inp and destination = :dest_code 
                                                and train_time between = :time_a and = :time_b" />                                   
            <property name="sortKey" value="train_time" />
        </bean>
    </property>
    <property name="parameterValues">
        <map>
            <entry key="pymt_type_code" value="#{jobParameters['train_type']}" />
            <entry key="mrkt_code" value="#{jobParameters['dest_code']}" />
            <entry key="start_time" value="#{jobParameters['time_a']}" />
            <entry key="end_time" value="#{jobParameters['time_b']}" />
        </map>
    </property>
    <property name="pageSize" value="5" />
    <property name="rowMapper">
        <bean class="com.train.timetable.Mapper.SampleMapper" />
    </property>
</bean>

В приведенной выше базе данных PostgreS train_time добавлен как тип TIMESTAMP. Следовательно, мне нужно добавить параметр time_a и time_b в качестве параметра задания при запуске задания. Но я не понимаю, как добавить TIMESTAMP в JobParameter. Я попытался передать время как строку (как указано ниже). Но это не работает.

JobParameters jobParameters = new JobParametersBuilder()
            .addString("train_type", "LOCAL")
            .addString("dest_code", "CAN")
            .addString("time_a", "2018-02-05 18:21:46.24812")
            .addString("time_b", "2018-02-05 18:22:07.085596").toJobParameters();


    JobExecution result = jobLauncher.run(jobLocator.getJob(jobName), jobParameters); 

Может ли кто-нибудь помочь мне с этим. Заранее спасибо. Я искал эту проблему и узнал о классе DefaultJobParametersConverter весной. Но я не уверен, как его использовать. Пожалуйста, помогите мне. Я застрял здесь. Я не могу изменить тип столбца из TIMESTAMP.


person nafi    schedule 05.02.2018    source источник
comment
В вашем случае вы используете собственный запрос, поэтому используйте функцию, предоставляемую postgres (в вашем случае), для преобразования из String в Timestamp, например TO_TIMESTAMP. Что-то вроде .... WHERE train_time между TO_TIMESTAMP(:start_time,'ГГГГ-ММ-дд ЧЧ:мм:сс') и ....   -  person Nghia Do    schedule 06.02.2018
comment
Спасибо за ответ @Nghia Do, но я не могу использовать эту встроенную функцию postgres JdbcPagingItemReader. Как вы видете. Я использую SqlPagingQueryProviderFactoryBean для запросов. Похоже, что SqlPagingQueryProviderFactoryBean не будет поддерживать специфическую функцию postgres. Но когда я проверил, есть еще один провайдер запросов PostgresPagingQueryProvider. Кто-нибудь знает, как его использовать?   -  person nafi    schedule 06.02.2018
comment
Вы пробовали? Какую ошибку вы получаете? Пожалуйста, разместите здесь   -  person Nghia Do    schedule 06.02.2018
comment
Привет Нгиа, функция TO_TIMESTAMP не работала в моем коде, но работает в pgAdminIII. Я использую SqlPagingQueryProviderFactoryBean в своем bean-компоненте, чтобы предоставить запрос Bean, который не поддерживает функции postgres. Любое предложение?   -  person nafi    schedule 07.02.2018
comment
Пожалуйста, опубликуйте ошибку, когда вы пытались. Я хотел бы видеть трассировку стека с ошибкой   -  person Nghia Do    schedule 07.02.2018


Ответы (1)


Вы можете использовать метод addDate

parameters = new JobParametersBuilder()
                           .addDate("key", new Date())
                           .toJobParameters();
person Niraj Sonawane    schedule 09.02.2018