Как добавить параметры в программу чтения элементов Spring Batch? - PullRequest
0 голосов
/ 26 декабря 2018

Я чувствую, что это действительно простая вещь, но я не могу найти документы о том, как это сделать.Вся документация / примеры, которые я нахожу, предполагают статические запросы.Я могу сделать это как статический запрос, но я хочу знать, как сделать это с переменными.Я пытаюсь использовать Spring Batch с Postgres.

Я собираюсь сделать запрос, подобный следующему:

SELECT * from SOME_TABLE WHERE SOURCE = ? AND (EXPIRES BETWEEN ? AND ?)

Я пробовал различные способы написания запроса,например, замена вопросительных знаков такими переменными, как :source.Я даже не уверен, использую ли я правильные ItemReader классы или мне нужно написать свои собственные.Это мой конфиг:

@Bean
protected JdbcPagingItemReader<JpaEntitlement> itemReader(DataSource dataSource)
        throws Exception {
    JdbcPagingItemReader<JpaEntitlement> pagingItemReader = new JdbcPagingItemReader<>();
    pagingItemReader.setDataSource(dataSource);
    pagingItemReader.setPageSize(1);

    PagingQueryProvider pagingQueryProvider = createQueryProvider(dataSource);
    pagingItemReader.setQueryProvider(pagingQueryProvider);
    pagingItemReader.setRowMapper(new BeanPropertyRowMapper<>(JpaClass.class));
    return pagingItemReader;
}

private PagingQueryProvider createQueryProvider(DataSource dataSource) throws Exception {
    SqlPagingQueryProviderFactoryBean pagingQueryProvider =
            new SqlPagingQueryProviderFactoryBean();
    pagingQueryProvider.setSelectClause("*");
    pagingQueryProvider.setFromClause("FROM SOME_TABLE");
    pagingQueryProvider.setWhereClause("WHERE SOURCE = ? AND (EXPIRES between ? AND ?)");
    pagingQueryProvider.setDataSource(dataSource);
    return pagingQueryProvider.getObject();
}

Наверное, главный вопрос заключается в следующем: есть ли что-то, что включено в Spring Batch для этого?Если нет, то что мне следует переопределить, чтобы добавить эту функциональность?

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

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Мне кажется, что это действительно базовая вещь, но я не могу найти документы о том, как это сделать.

Соответствующий раздел из справочной документации: ПоздноПривязка атрибутов задания и шага , в которых приведены примеры кода использования JobScope и StepScope.Идея состоит в том, что вы можете динамически связывать атрибуты запросов в читателе в последнее время во время выполнения (а не с нетерпением во время настройки) либо из параметров задания, либо из контекста выполнения задания / шага.

Надеюсь, это поможет.

0 голосов
/ 26 декабря 2018

Если вы знаете параметры при запуске партии, передайте параметры как Jobparamters.Теперь вы можете получить доступ к параметрам задания в Reader, используя @ StepScope.Ниже приведен пример кода для доступа к параметрам задания в считывателе

@Bean
protected JdbcPagingItemReader<JpaEntitlement> itemReader(@Value("#{jobParameters['someparameter']}") String someparameter DataSource dataSource)
        throws Exception {
    JdbcPagingItemReader<JpaEntitlement> pagingItemReader = new JdbcPagingItemReader<>();
    pagingItemReader.setDataSource(dataSource);
    pagingItemReader.setPageSize(1);

    PagingQueryProvider pagingQueryProvider = createQueryProvider(dataSource);
    pagingItemReader.setQueryProvider(pagingQueryProvider);
    pagingItemReader.setRowMapper(new BeanPropertyRowMapper<>(JpaClass.class));
    return pagingItemReader;
}

Надеюсь, это поможет

Это похоже на этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...