2015-02-11 9 views
5

Ich habe eine Anforderung zum Erstellen eines Task-Scheduler mit 10 Threads, die wir gleichzeitig auslösen müssen und jeder Thread wird mit einem Status der vollständigen oder fehlgeschlagen. Basierend auf dem Ergebnis des Threads werden wir einen DB-Aufruf machen und die Daten von db abrufen. Die Anwendung ist bereits mit Spring Framework konfiguriert. Ich verstehe, dass Frühling Aufgabenplaner zur Verfügung stellt, aber nicht sicher, wie man es benutzt, Frühlingsneuling braucht Hilfe. Wie wäre es mit dem ScheduledExecutorService von java, können wir das verwenden? Welchen Vorteil werden wir über den anderen bekommen? Gibt es eine bessere Alternative zu Spring Task Scheduler und Java ScheduledExecutorService?Spring Task Scheduler vs Java ScheduledExecutorService

Antwort

1

Feder TaskExecutor ist eigentlich identisch mit Java Executor Schnittstelle. Nach Spring 2.0 TaskExecutor wurde eingeführt, um Abstraktion zu den Java Executor hinzuzufügen, so dass es Implementierungsdetails zwischen Java SE verschiedenen Versionen und EE-Umgebungen verbergen wird.

Da Sie bereits Frühjahr Umgebung haben, würde ich dringend empfehlen, Frühling schedulers zu verwenden. Später, wenn es nötig sein wird, können Sie anderen Spring-Komponenten eine Abstraktion für das Thread-Pooling usw. geben.

Auch gibt es einige vorgefertigte Implementierungen von TaskExecutor, was ideal ist, da Sie sich nicht um die Details und Umsetzung von Ihnen selbst.

1

Die einfachste Möglichkeit besteht darin, die mitgelieferten Task-Tags in der Spring-Konfiguration zu verwenden. Beachten Sie die ‚Aufgabe‘ Namespace unter

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

sobald Sie getan haben, dass Sie

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

usw. Ihre tatsächliche geplante Aufgabe verwenden können, ist eine Bohne mit einem Verfahren auf, dass es aufgerufen wird. Sie können es auf einer festen Verzögerung planen oder auf einem Cron usw.

Sie können auch Vollstrecker in der Config wie folgt erklären:

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

Sie einen Testamentsvollstrecker können einen Pool von Aufgaben gleichzeitig auszuführen (injizieren diese Bohne in deine Bohne und sieh dir an, was sie bietet).

Verwandte Themen