2015-02-11 19 views
5

Ho un requisito per creare un task scheduler con 10 thread che dobbiamo attivare contemporaneamente e ogni thread tornerà con uno stato di completo o fallito. In base al risultato della discussione, effettueremo una chiamata db e recupereremo i dati da db. L'applicazione è già configurata con Spring Framework. Capisco che la primavera fornisca l'utilità di pianificazione, ma non è sicuro di come usarla, il principiante ha bisogno di aiuto. Che ne dici di ScheduledExecutorService di java, possiamo usarlo? Quale vantaggio otterremo l'uno sull'altro? Esiste un'alternativa migliore all'utilità di pianificazione di Spring e ScheduledExecutorService di Java?Spring Task Scheduler contro Java ScheduledExecutorService

risposta

1

Spring TaskExecutor è in realtà identico all'interfaccia java Executor. Dopo Spring 2.0 è stato introdotto TaskExecutor per aggiungere l'astrazione allo Executor di Java, in modo da nascondere i dettagli di implementazione tra le diverse versioni di Java SE e gli ambienti EE.

Come già l'ambiente Spring, consiglio vivamente di utilizzare la molla schedulers. In seguito, se sarà necessario, puoi fornire ad altri componenti di Spring un'astrazione per il pool di thread, ecc.

Inoltre ci sono alcune implementazioni predefinite di TaskExecutor, che è l'ideale, poiché non devi preoccuparti del dettagli e implementazione da soli.

1

Il modo più semplice è utilizzare i tag di attività forniti nella configurazione di primavera. Avviso lo spazio dei nomi 'compito' sotto

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:ctx="http://www.springframework.org/schema/context" 
     xmlns:task="http://www.springframework.org/schema/task" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd 
"> 

volta che hai fatto che è possibile utilizzare

<task:scheduler id="taskScheduler" pool-size="4"/> 
<task:scheduled-tasks scheduler="taskScheduler"> 
    <task:scheduled ref="someBean" method="someMethod" fixed-rate="21600000" initial-delay="60000"/> 
</task:scheduled-tasks> 

ecc il vostro compito effettiva pianificata è un fagiolo con un metodo su di esso che viene chiamato. È possibile programmare su un ritardo fisso o su un cron ecc

si può anche dichiarare esecutori nella configurazione in questo modo:

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> 
     <description>A task pool for general use</description> 
     <property name="corePoolSize" value="150" /> 
     <property name="maxPoolSize" value="200" /> 
     <property name="queueCapacity" value="10" /> 
     <property name="keepAliveSeconds" value="0"/> 
     <property name="waitForTasksToCompleteOnShutdown" value="false"/> 
    </bean> 

È possibile utilizzare un esecutore di eseguire un pool di attività simultanee (iniettare quel fagiolo nel tuo fagiolo e guarda cosa fornisce).

Problemi correlati