Blog o programování a webu - Java, Spring, Python a jiné

Omezení dostupnosti služeb – Java, Spring, Quartz

Aug 6, 13 • SpringComments OffRead More »

Setkal jsem se s požadavkem na časové omezení dostupnosti služby. Na webu se tato omezení často nevyskytují, ale určitě mimo svět internetu to taková vzácnost už není. Ukažme si tedy jak definovat časový interval a poté zjistit zda aktuální okamžik do něj spadá v jazyce Java s pomocí Springu a Quartz.

Cron expression

Jak tedy jednotně definovat i složité časové omezení? Pro samotné definování času použijeme cron expression. Uvedu jednoduché příklady

String weekend = "* * * ? * SAT-SUN"; // weekend
String maintenance = "* * 1-3 ? * FRI-SAT"; // maintenance time
String workingTime = "* * 9-18 ? * MON-FRI"; // shop opening time

Quartz

Do naší aplikace poté přidáme knihovnu Quartz pomocí Mavenu.

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.0</version>
</dependency>

Můžeme definici zvalidovat

boolean validExpression = CronExpression.isValidExpression(cronExpression);

Provedení samotné kontroly je již jednoduché.

CronExpression cronExpression = new CronExpression(expression);
boolean satisfied = cronExpression.isSatisfiedBy(new Date());

Samozřejmě můžeme testovat nejen aktuální datum.

Persistence omezení

1. Spring XML

  • výhoda – při změně nutnost měnit pouze na jednom místě, možnost předefinovat pomocí Spring profiles, nízké náklady na získání hodnoty
  • nevýhoda – nutnost udělat release aplikace při změně hodnoty

2.  Config file na aplikační server

  • výhoda – možnost měnit hodnotu bez nutnosti dělat release či dokonce restart, možnost předefinovat na testovacích prostředích
  • nevýhoda – možná nesynchronizovanost při použití více serverů v clusteru, bez podpory IDE při zápisu cron expression (hůř odhalitelná chyba)

3. Databáze

  • výhoda – možnost měnit hodnotu bez nutnosti dělat release či dokonce restart, možnost předefinovat na testovacích prostředích v případě existence oddělené testovací databáze
  • nevýhoda – nutnost použít cache, jinak drahé náklady na získání hodnoty, bez podpory IDE při zápisu cron expression (hůř odhalitelná chyba), riziko neznalosti cron expression u osoby spravující konfiguraci aplikace

V mém případě byla omezení dána hlavně omezením dalších systémů a jelikož se nepředpokládá jejich změna, byla zvolena varianta uložení do konfigurace Springu.

Zhodnocení

Kdybych měl zhodnotit celé řešení, tak výhodou je jednoduchá a vcelku známá syntaxe pro definování omezení, nevýhodou pak nutnost do projektu dotáhnout závislot na Quarz knihovně i v případě, že nechcete používat další její funkcionality.

Pokud víte o jiném a nejlépe i elegantnějším řešení tohoto problému, budu moc rád, když se o něj podělíte pomocí komentáře a nebo emailu.

Tags: , ,

Comments are closed.