Nano Hash - криптовалюты, майнинг, программирование

Сохранение и доступ к количеству строк, полученных JdbcCursorItemReader

Наше пакетное приложение Spring имеет: пользовательский JdbcCursorItemReader, который читает из базы данных, и пользовательский JmsItemWriter, который позволяет добавлять заголовки к каждому сообщению.

Идея состоит в том, что каждое сообщение будет иметь идентификатор корреляции и быть частью набора. В JmsItemWriter нам нужно получить доступ к общему количеству строк, полученных средством чтения элементов.

Каков наилучший подход для этого?

Спасибо

29.04.2014

Ответы:


1

Если вам нужно получить доступ к ОБЩЕМУ количеству строк (например, select count(*) from table), лучше всего создать предыдущий шаг, на котором вы выполняете подсчет и помещаете результат в контекст выполнения, чтобы получить к нему доступ на следующих шагах.
Если вы нужен номер текущей записи JdbcCursorItemReader наследует эти средства от AbstractItemCountingItemStreamItemReader

29.04.2014
  • Спасибо большое. Как лучше всего получить доступ к контексту выполнения из ItemProcessor или ItemWriter? 29.04.2014
  • посмотрите на stackoverflow.com/questions/22205778/ 29.04.2014
  • Спасибо за вашу помощь. Будет ли это работать (и избежать как дополнительного шага, так и обращения к БД с дополнительным запросом): 1. Создайте собственный JdbcCursorItemReader 2. Вставьте в него контекст выполнения (‹property name=var2 value=#{jobExecutionContext} /›) 3. В JdbcCursorItemReader.cleanUpOnClose() вызвать getCurrentItemCount(); 4. Сохранить это значение в контексте выполнения? 30.04.2014
  • Может быть. Ты должен попробовать. Но я предпочитаю дополнительный шаг, потому что считаю его более читабельным (или реализовать StepExecutionListener.beforeStep() для выполнения select count, если вы не хотите создавать дополнительный шаг) 30.04.2014
  • Спасибо. Вот чего я не понимаю: как из элемента записи, процессора или читателя получить сам StepExecutionContext, чтобы затем добавить к нему переменную (в отличие от получения значения переменной, которая уже находится в нем) . Это возможно? 01.05.2014
  • Используйте слушателей. Или расширить или делегировать читатель, писатель или процессор 01.05.2014
  • Какие функциональные возможности базового класса при расширении чтения, записи или процессора предоставляет stepExecutionListener ? 01.05.2014
  • сэр, я не человек javadoc ;) Я ответил на ваш вопрос и многое другое ... пожалуйста, прочитайте официальную документацию по адресу docs.spring.io/spring-batch/reference/html о слушателях 01.05.2014
  • Отлично - внедрить ItemStream - очень признателен. 01.05.2014

  • 2

    Самый простой способ - использовать StepListener, см. следующий пример:

    @Component
    public class StepListener extends StepExecutionListenerSupport {
    
      @Override
      public ExitStatus afterStep(StepExecution stepExecution) {
        // here, you can debug stepExecution to get some values like "readCount" :
        logger.info(stepExecution.getReadCount());
    
        // you also have commitCount, writeCount, rollbackCount, readSkipCount, writeSkipCount, processSkipCount, filterCount
    
        // check stepExecution.getSummary for a nice one line info
        logger.info(stepExecution.getSummary());
    
        return null;
      }
    }
    

    Не забудьте настроить stepListener на шаге пакетной конфигурации.

    20.07.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..