Question

Au printemps 3.0 le ScheduledTimerTask est dépréciée et je ne peux pas comprendre comment mettre à niveau à 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>

Lorsque le OnlineTimerTask étend java.util.TimerTask. Il est une tâche simple qui publie un message à l'éditeur chaque minute. J'ai vérifié la documentation, mais rien .. Je ne comprends pas de quelle manière d'utiliser de l'emballage simultané et qui convient le mieux.

Aussi je veux transformer ce xml en @Bean en Java.

EDIT:. J'ai donc essayé de mettre en œuvre le xml avec @Bean et @Configuration à la place et voici ce que je suis

@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;
    }
}

Est-ce que le code ci-dessus est correct pour remplacer xml? Est-ce que dans mon cas les setScheduledExecutorTasks fonctionner correctement? Je veux dire ce que le référencement à est appelé plus d'une fois, travaillera ici la même instance de haricot, si onlineTimeSchedule ()?

scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});
Était-ce utile?

La solution

Utilisation org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean à la place de org.springframework.scheduling.timer.TimerFactoryBean de org.springframework.scheduling.concurrent.ScheduledExecutorTask et de l'utilisation à la place de org.springframework.scheduling.timer.ScheduledTimerTask. Vous devez régler les noms des propriétés et des valeurs selon les besoins, mais cela devrait être assez évident.

En option, vous pouvez factoriser votre com.example.OnlineTimerTask de ne pas prolonger java.util.TimeTask comme ScheduledTimerTask ne nécessite que runnable.

Autres conseils

Spring 4 configuration - Ci-dessous, travail de configuration après la migration printanière de 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>

La réponse est - Ajouter un champ "runnable"

 <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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top