Использование кварца с Spring

Пример из Spring Docs с использованием RowMapper:

public class JdbcActorDao implements ActorDao {

private SimpleJdbcCall procReadAllActors;

public void setDataSource(DataSource dataSource) {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.setResultsMapCaseInsensitive(true);
    this.procReadAllActors = new SimpleJdbcCall(jdbcTemplate)
            .withProcedureName("read_all_actors")
            .returningResultSet("actors",
            BeanPropertyRowMapper.newInstance(Actor.class));
}

public List getActorsList() {
    Map m = procReadAllActors.execute(new HashMap(0));
    return (List) m.get("actors");
}

// ... additional methods

}

6
задан Serkan Arıkuşu 19 July 2012 в 12:20
поделиться

5 ответов

Можно также заставить Spring инициировать методы на бобах с помощью Кварца (т.е. youdon't должен создать любые Определенные для кварца классы вообще), использование MethodInvokingJobDetailFactoryBean в пакете org.springframework.scheduling.quartz

2
ответ дан 8 December 2019 в 03:54
поделиться

Учитывая, что SchedulerFactoryBean выставляет собственный Кварцевый Объект планировщика, можно соединить это проводом непосредственно в класс контроллера, и затем динамично создать и зарегистрировать триггеры и задания с Объектом планировщика.

Сам Spring не может использоваться для планирования динамично созданных заданий, так как бобовая поддержка Spring будет использоваться для статически настроенных заданий, но собственного Кварцевого Планировщика, который API достаточно разумен для использования самостоятельно (едва). Как инициирование франка заданий, что задание Кварца, не Spring.

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

12
ответ дан 8 December 2019 в 03:54
поделиться

Взгляд на CronTriggerBean и JobDetailBean. Класс 'MyJob', копируемый ниже, является экземпляром QuartzJobBean. Выражение крона - то, что Вы ожидали бы, но с секундами как его первое значение.

<beans>
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="startupDelay" value="5"/>
      <property name="waitForJobsToCompleteOnShutdown" value="false"/>
      <property name="triggers">
         <list>
            <bean class="org.springframework.scheduling.quartz.CronTriggerBean">
               <property name="jobDetail">
                  <bean class="org.springframework.scheduling.quartz.JobDetailBean">
                     <property name="jobClass" value="edu.vt.MyJob"/>
                     <property name="jobDataAsMap">
                        <map>
                           <entry key="messageSource" value-ref="messageSource"/>
                           <entry>
                              <key><value>anotherProperty</value></key>
                              <bean class="edu.vt.MyUsefulBean">
                                 <constructor-arg index="0" value="..."/>
                              </bean>
                           </entry>
                        </map>
                     </property>
                  </bean>
               </property>
               <property name="cronExpression" value="0 * * * * ?"/>
            </bean>
         </list>
      </property>
   </bean>
</beans>
4
ответ дан 8 December 2019 в 03:54
поделиться

Образец исходного кода можно загрузить с по этой ссылке

<?xml version="1.0" encoding="UTF-8"?>

<!--  scheduler factory -->
<bean   id="com.notary.app.invoicing.scheduler.SchedulerFactory" 
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="ASFImportTrigger"/>
        </list>
    </property>
    <property name="dataSource">
        <ref bean="datasource"/>
    </property>
    <property name="transactionManager">
        <ref bean="transactionManager"/>
    </property>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
            <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.MSSQLDelegate</prop>
            <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
            <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>
            <prop key="org.quartz.plugin.triggHistory.class">org.quartz.plugins.history.LoggingTriggerHistoryPlugin</prop>
            <prop key="org.quartz.plugin.triggHistory.triggerFiredMessage">Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss dd/MM/yyyy}</prop>
            <prop key="org.quartz.plugin.triggHistory.triggerCompleteMessage">Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss dd/MM/yyyy} with resulting trigger instruction code: {9}</prop>
            <prop key="org.quartz.plugin.jobHistory.class">org.quartz.plugins.history.LoggingJobHistoryPlugin</prop>
            <prop key="org.quartz.plugin.jobHistory.jobSuccessMessage">Job {1}.{0} fired at: {2, date, dd/MM/yyyy HH:mm:ss} result=OK</prop>
            <prop key="org.quartz.plugin.jobHistory.jobFailedMessage">Job {1}.{0} fired at: {2, date, dd/MM/yyyy HH:mm:ss} result=ERROR</prop>
        </props>
    </property>
    <property name="overwriteExistingJobs" value="true"/>
    <property name="startupDelay" value="50"/>
    <property name="applicationContextSchedulerContextKey">
        <value>applicationContext</value>
    </property>
</bean>

3
ответ дан 8 December 2019 в 03:54
поделиться

Год спустя я обнаружил, что у меня что-то очень похожее. Погуглил, я нашел эту ссылку , которая описывает получение доступа к контексту приложения из запланированного задания через JobExecutionContext. Я думаю, что буду создавать задание абстрактного типа, которое может выполнять некоторые из фактических задач создания и использовать прототип для фактического внедрения требуемых сервисов, когда задание должно выполняться.

1
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: