Frage

Ab dem Frühjahr 3.0 ist die geplante TimeTask veraltet und ich kann nicht verstehen, wie man auf org.springframework.Scheduling.Concurrent ein Upgrade eingreift.

    <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>

Wo die onlineetimertask erweitert java.util.timertask. Es ist eine einfache Aufgabe, die jede Minute eine Nachricht an den Verlag veröffentlicht. Ich habe die Dokumentation überprüft, aber nichts. Ich kann nicht verstehen, wie ich aus dem gleichzeitigen Paket verwenden soll und welche am besten passt.

Außerdem möchte ich diesen XML in @Bean in Java verwandeln.

BEARBEITEN: Also habe ich versucht, den XML mit @Bean und @Configuration zu implementieren, und hier habe ich hier.

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

Wird der obige Code für XML korrekt sein? Funktioniert die SetScheduledexecutortasks in meinem Fall ordnungsgemäß? Ich meine, wird die Verweise auf dieselbe Bean -Instanz, wenn onlineTimeScher () mehr als einmal bezeichnet wird, hier funktionieren?

scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});
War es hilfreich?

Lösung

Verwenden org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean anstelle von org.springframework.scheduling.timer.TimerFactoryBean und verwenden org.springframework.scheduling.concurrent.ScheduledExecutorTask anstelle von org.springframework.scheduling.timer.ScheduledTimerTask. Sie müssen die Eigenschaften und Werte nach Bedarf anpassen, aber das sollte ziemlich selbstverständlich sein.

Optional können Sie Ihre neu umrüsten com.example.OnlineTimerTask sich nicht ausdehnen java.util.TimeTask Da die geplante TimeTasked nur einen Runnable erfordert.

Andere Tipps

Feder 4 -Konfiguration - Unter Konfiguration funktioniert nach der Federmigration von 3.2.x bis 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>

Die Antwort lautet: Fügen Sie ein "Lauf" -Feld hinzu

 <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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top