sql >> Databáze >  >> RDS >> Mysql

Spouštění programu Java na základě aktualizací databáze a časového intervalu

Napište jedinou práci. Nechte jej pravidelně spouštět.

Ve skutečnosti budete dělat něco podobného jako:

SELECT count(*) FROM table WHERE new = 1;

(nebo cokoli jiného)

Spusťte to každou sekundu, 5 sekund, 10 sekund, podle toho, co se na základě vaší aktivity zdá rozumné.

Když počet ==N, spusťte proces. Když "čas od posledního spuštění" ==5 minut, spusťte proces.

Proces je stejný, jen ho kontrolujete častěji podle dvou kritérií.

To nabízí výhodu, že nedosáhnete nepravdivého sporu, kdy se úloha spustí DVAKRÁT (protože úloha A zjistila počet vložených položek, který, jak se stalo, byl 5 minut od spuštění poslední úlohy). Vzácné, ano, ale rasové podmínky vždy aktivně vyhledávají „vzácné“ události, které se „nikdy nestanou“.

Co se týče plánování, crontab je snadný, protože nemusíte udržovat svůj proces, udržovat ho naživu, démonizovat atd. atd.

Pokud již běžíte v dlouho běžícím kontejneru (aplikační server, kocour atd.), pak je tento problém již vyřešen a můžete jej využít.

Nevýhodou cronu je jeho granularita, běží maximálně každou minutu. Pokud je to příliš dlouho, nebude to pro vás fungovat. Ale pokud je to v pořádku, pak má skutečnou hodnotu mít jednoduchý proces, který se jen rozsvítí, zkontroluje a skončí. Samozřejmě bude muset nějakým způsobem přetrvat svůj stav (může se například podívat do protokolu úlohy a zjistit, kdy byla spuštěna poslední úloha).

V rámci javy existuje spousta možností:nezpracovaná vlákna, režim spánku, časovače, služba ScheduledExecutorService, něco jako Quartz, EJB Timer beans (pokud používáte kontejner Java EE).

Ale jsem fanouškem KISS. Pokud to může udělat úloha cron, nechte to a udělejte to jednou.



  1. Oracle, jak načíst obrázek do sloupce blob pomocí sqlldr

  2. MySQL Jak vložit nový záznam nebo aktualizovat pole v závislosti na tom, zda existuje?

  3. Jak získat celkový počet nalezených řádků bez zohlednění limitu v PDO?

  4. Jak vložit data na SQL Server