Domanda

A partire da Spring 3.0, il PresentatedTimerTask è deprecato e non riesco a capire come eseguire l'aggiornamento a 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>

Dove l'onlinetimertask si estende java.util.imertask. È un compito semplice che pubblica un messaggio all'editore ogni minuto. Ho controllato la documentazione, ma niente .. Non riesco a capire da che parte utilizzare dal pacchetto simultaneo e quale si adatta al meglio.

Inoltre voglio trasformare questo XML in @Bean in Java.

MODIFICARE: Quindi ho provato ad implementare l'XML con @Bean e @Configuration e qui è quello che ho ottenuto.

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

Il codice sopra sarà la corretta sostituzione di XML? Nel mio caso i setScheduledeExecutortaSks funzionano correttamente? Voglio dire, il riferimento alla stessa istanza di fagioli, se onlinetimeschedule () viene chiamato più di una volta, funzionerà qui?

scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});
È stato utile?

Soluzione

Uso org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean al posto di org.springframework.scheduling.timer.TimerFactoryBean e usa org.springframework.scheduling.concurrent.ScheduledExecutorTask al posto di org.springframework.scheduling.timer.ScheduledTimerTask. Dovrai regolare i nomi e i valori delle proprietà secondo necessità, ma dovrebbe essere piuttosto evidente.

Facoltativamente, potresti refactoring tuo com.example.OnlineTimerTask non estendere java.util.TimeTask Poiché il PianificatMeMerTask richiede solo un Runnable.

Altri suggerimenti

Configurazione Spring 4 - sotto la configurazione funzionante dopo la migrazione a molla da 3.2.x a 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 risposta è: aggiungi un campo "eseguibile"

 <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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top