Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uruchamianie programu Java na podstawie aktualizacji bazy danych i interwału czasowego

Napisz jedną pracę. Niech uruchamia się regularnie.

W efekcie będziesz robić coś w rodzaju:

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

(lub cokolwiek)

Uruchamiaj to co sekundę, 5 sekund, 10 sekund, cokolwiek wydaje się rozsądne na podstawie Twojej aktywności.

Gdy liczba ==N, uruchom swój proces. Gdy „czas od ostatniego uruchomienia” ==5 minut, uruchom proces.

Proces jest taki sam, po prostu sprawdzasz to częściej za pomocą dwóch kryteriów.

Daje to tę zaletę, że nie dostaniesz nieuczciwych warunków wyścigu, w których zadanie uruchamia się DWUKROTNIE (ponieważ Zadanie A znalazło liczbę wstawek, która tak się składa, że ​​wynosiła 5 minut od ostatniego uruchomienia zadania). Rzadkie, tak, ale warunki wyścigowe zawsze wydają się aktywnie poszukiwać „rzadkich” wydarzeń, które „nigdy się nie zdarzają”.

Jeśli chodzi o planowanie, crontab jest łatwy, ponieważ nie musisz utrzymywać procesu, utrzymywać go przy życiu, demonizować itp. itd.

Jeśli już korzystasz z długo działającego kontenera (serwer aplikacji, tomcat itp.), ten problem został już rozwiązany i możesz to po prostu wykorzystać.

Wadą crona jest jego szczegółowość, działa tylko co najwyżej co minutę. Jeśli to za długo, to nie zadziała. Ale jeśli wszystko jest w porządku, to naprawdę warto mieć prosty proces, który po prostu się zapala, sprawdza i kończy. Oczywiście będzie musiał jakoś zachować swój stan (może na przykład zajrzeć do dziennika zadania, aby zobaczyć, kiedy ostatnie zadanie zostało uruchomione).

W javie jest wiele opcji:surowe wątki, uśpienie, Timery, ScheduledExecutorService, coś takiego jak Quartz, ziarna EJB Timer (jeśli używasz kontenera Java EE).

Ale jestem fanem KISS. Jeśli zadanie cron może to zrobić, pozwól na to i zrób to raz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić bieżące połączenia w MySQL Workbench za pomocą GUI

  2. Pomoc w kodzie SQL do znalezienia najnowszego rekordu na podstawie ID

  3. Problem z porównywaniem dat MySQL

  4. Czy można używać IF(cond1 AND cond2,result, else wynik) w MySQL?

  5. Wyjdź ze skryptu MySQL, jeśli baza danych istnieje