Как выполнить метод с использованием весенних бобов

StackOverflow https://stackoverflow.com/questions/1606676

  •  05-07-2019
  •  | 
  •  

Вопрос

Мне нужно, чтобы метод findItemByPIdEndDate () класса MngtImpl вызывался каждые 5000 мс, но, похоже, ничего не происходит. Я что-то упустил?

<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="MngtImpl"/>
  <property name="targetMethod" value="findItemByPIdEndDate"/>
  <property name="repeatInterval" value="50000"/>
</bean>

@matt b Я читал кое-что из этого, здесь все для меня ново ... так что я пришел с этим .. и опять же, он не работает, что я пропустил на этот раз?

<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="MngtImpl" />
  <property name="targetMethod" value="findItemByPIdEndDate" />
</bean>

<bean id="compareDateTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="findItemByPIdEndDate" />
    <property name="startDelay" value="0" />
    <property name="repeatInterval" value="50000" />
</bean>
Это было полезно?

Решение

Для этой задачи Глава 23 Планирование и объединение потоков - ваш друг . Тем не менее, вот краткое резюме.

Сначала определите свою работу :

<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="MngtImpl"/>
  <property name="targetMethod" value="findItemByPIdEndDate"/>
</bean>

Теперь вам нужно запланировать задание, используя триггер и SchedulerFactoryBean . Для триггера я предлагаю использовать SimpleTriggerBean в вашем случае:

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  <!-- see the example of method invoking job above -->
  <property name="jobDetail" ref="findItemByPIdEndDate" />
  <!-- 10 seconds -->
  <property name="startDelay" value="10000" />
  <!-- repeat every 50 seconds -->
  <property name="repeatInterval" value="50000" />
</bean>

Чтобы завершить все, настройте SchedulerFactoryBean :

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
    <list>
      <ref bean="simpleTrigger" />
    </list>
  </property>
</bean>

Другие советы

Вам нужно намного больше сантехники, чем это, чтобы заставить Кварц работать. Простое объявление MethodInvokingJobDetailFactoryBean само по себе ничего не даст.

Однако Quartz для этого излишен, Java5 + может сделать это самостоятельно. Я предлагаю ознакомиться с руководством Spring. ScheduledExecutorFactoryBean , который в сочетании с MethodInvokingRunnable , позволяет периодически вызывать ваш метод.

То, что вы сделали до сих пор, эквивалентно только созданию экземпляра MethodInvokingJobDetailFactoryBean () - по сути, все, что вы сделали, - это создали задание. Теперь вам нужно иметь некоторую конфигурацию для того, как это запланировано, и что вызывает это.

Просмотрите раздел в руководство Spring по кварцу .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top