2015-02-11 3 views
5

У меня есть требование создать планировщик задач с 10 потоками, которые необходимо запустить одновременно, и каждый поток будет возвращаться со статусом полного или неудачного. Основываясь на результате потока, мы сделаем вызов db и извлечет данные из db. Приложение уже настроено с помощью Spring Framework. Я понимаю, что весна предоставляет планировщик задач, но не уверен, как ее использовать, новичкам нужна помощь. Как насчет функции ScheduledExecutorService в Java, можем ли мы это использовать? Какое преимущество мы получим над другим? Есть ли лучшая альтернатива планировщику задач Spring и Java ScheduledExecutorService?Spring Task Scheduler vs. Java ScheduledExecutorService

ответ

1

Весна TaskExecutor на самом деле идентична java Executor Интерфейс. После Spring 2.0 добавлен TaskExecutor, чтобы добавить абстракцию в Java Executor, чтобы она скрывала детали реализации между различными версиями Java SE и средами EE.

Поскольку у вас уже есть весенняя среда, я настоятельно рекомендую использовать весну schedulers. Позже, если возникнет необходимость, вы можете дать другим компонентам пружины абстракцию для объединения потоков и т. Д.

Также есть некоторые готовые реализации TaskExecutor, которые идеально подходят, поскольку вам не нужно заботиться о деталей и реализации по своему усмотрению.

1

Самый простой способ - использовать предоставленные теги задач в конфигурации пружины. Обратите внимание на «задача» пространства имен ниже

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

, как только вы сделали, что вы можете использовать

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

и т.д. действительное запланированное задание является боб с методом на нем, который вызывается. Вы можете запланировать его на фиксированную задержке или хроны и т.д.

вы также можете объявить исполнитель в конфигурации, как это:

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

Вы можете использовать исполнитель для выполнения пула параллельных задач (инъекционной этот bean-компонент в ваш bean-компонент и посмотрите, что он предоставляет).