Вопрос

По состоянию на весну 3.0 запланированная тимскаска устарела, и я не могу понять, как перейти на org.springframework.scheduling.concurrent.

    <bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
        <property name="scheduledTimerTasks">
            <list>
                 <ref bean="onlineTimeSchedule" />
            </list>
            </property>
    </bean>

    <bean id="onlineTimeSchedule" class="org.springframework.scheduling.timer.ScheduledTimerTask">
        <property name="timerTask" class="com.example.OnlineTimerTask" />
        </property>
        <property name="period" value="60000" />
        <property name="delay" value="1000" />
    </bean>

Где онлимерт, расширяет java.util.timertask. Это простая задача, которая публикует сообщение для издателя каждую минуту. Я проверил документацию, но ничего ... я не могу понять, какой способ использовать из параллельного пакета и что подходит лучше всего.

Также я хочу превратить этот XML в @Bean в Java.

РЕДАКТИРОВАТЬ: Поэтому я попытался реализовать XML с @Bean и @Configuration вместо этого, и вот что я получил.

@Configuration
public class ContextConfiguration {
    @Bean
    public ScheduledExecutorFactoryBean scheduledExecutorFactoryBean() {
        ScheduledExecutorFactoryBean scheduledFactoryBean = new ScheduledExecutorFactoryBean();
        scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});

        return scheduledFactoryBean;
    }

    @Bean
    public ScheduledExecutorTask onlineTimeSchedule() {
        ScheduledExecutorTask scheduledTask = new ScheduledExecutorTask();
        scheduledTask.setDelay(1000);
        scheduledTask.setPeriod(60000);
        scheduledTask.setRunnable(new OnlineTimerTask());

        return scheduledTask;
    }
}

Будет ли код выше правильной замены для XML? Будет ли в моем случае работать правильно? Я имею в виду, будет ли ссылка на один и тот же экземпляр бобов, если onlinetimesschedule () вызывается более одного раза, будет ли работать здесь?

scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});
Это было полезно?

Решение

Использовать org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean на месте org.springframework.scheduling.timer.TimerFactoryBean и использовать org.springframework.scheduling.concurrent.ScheduledExecutorTask на месте org.springframework.scheduling.timer.ScheduledTimerTask. Анкет Вам нужно будет настроить имена и значения свойств по мере необходимости, но это должно быть довольно очевидным.

При желании вы можете рефакторировать свой com.example.OnlineTimerTask не распространяться java.util.TimeTask Поскольку запланированная тимскаска требует только запуска.

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

Конфигурация пружины 4 - ниже конфигурации, работающая после пружинной миграции с 3.2.x до 4.6.x

<bean id="schedulerTask"
        class="org.springframework.scheduling.support.MethodInvokingRunnable">
        <property name="targetObject" ref="springJmsListnerContainer" />
        <property name="targetMethod" value="execute" />
    </bean>
    <bean id="timerTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
        <property name="runnable" ref="schedulerTask" />
        <property name="delay" value="100" />
        <property name="period" value="60000" />
    </bean>
    <bean class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
        <property name="scheduledExecutorTasks">
            <list>
                <ref bean="timerTask" />
            </list>
        </property>
    </bean>

Ответ - добавьте одно «заполненное» поле

 <bean id="scheduledExecutorTask" 
    class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
    <!-- wait 10 milli seconds before starting repeated execution -->
    <property name="delay">
        <value>10</value>
    </property>
    <!-- run every 1 second -->
    <property name="period">
        <value>1000</value>
    </property>
    <property name="runnable">
        <ref bean="checkInvokingTask"/>
    </property>
</bean>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top