Pull to refresh

Выполнение кода по расписанию в Spring Framework

Reading time2 min
Views28K
Тут приспичило мне периодически запускать некоторый код в небольшом проектике написанном на Spring Framework. Я уж было приготовился по старой памяти (еще со спринга 2.x) к долгому прикручиванию quartz-а и написании кучи конфигов на xml, как оказалось все значительно проще

Документация Spring Framework как обычно дает исчерпывающий, но иногда избыточный ответ

На самом деле все просто:

1. Делай раз — добавь в свой спринговый конфиг (минимальный все-таки в любом проекте присутсвует — не все еще делается аннотациями) task namespace, что бы выглядело примерно так (обратите внимание на слово task):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
www.springframework.org/schema/beans www.springframework.org/schema/beans/spring-beans.xsd
www.springframework.org/schema/context www.springframework.org/schema/context/spring-context.xsd
www.springframework.org/schema/tx www.springframework.org/schema/tx/spring-tx.xsd
www.springframework.org/schema/task www.springframework.org/schema/task/spring-task.xsd">


2. Делай два — там же сконфигури шедулер:

<task:annotation-driven executor="executor" scheduler="scheduler"/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="10"/>


3. Делай три — повесь на метод какого-нибудь бина аннотацию @Scheduled, например:
@Scheduled(fixedDelay=5000)
public void doSomething() {
// do something every 5 seconds
}

Все! В очередной раз убедился в своей любви к спрингу — когда технологии разрабатывается не ради технологий, а ради удобства разработчиков
Tags:
Hubs:
Total votes 23: ↑21 and ↓2+19
Comments16

Articles