2021.06

Cronjob

Für das zeitbasierte Ausführen von bestimmten Aufgaben gibt es das Cronjob-Modul.

Ein Kommando zu einem bestimmten Zeitpunkt ausführen

Mit dem MCRCommandCronJob lassen sich beliebige MyCoRe-Kommandos ausführen.

1
2
3
4
5
6
MCR.Cronjob.Jobs.SitemapBuild=org.mycore.mcr.cronjob.MCRCommandCronJob
# MCR.Cronjob.Jobs.SitemapBuild.Enabled=true
# MCR.Cronjob.Jobs.SitemapBuild.Contexts=WEBAPP
# MCR.Cronjob.Jobs.SitemapBuild.CronType=UNIX
MCR.Cronjob.Jobs.SitemapBuild.Cron=0 2 * * *
MCR.Cronjob.Jobs.SitemapBuild.Command=build google sitemap
Alle Cronjobs haben die folgenden Konfigurationsmöglichkeiten:
  • Das notwendige Property Cron definiert, wann der Cronjob ausgeführt wird.
    Eine gute Hilfe für Zeitangaben im Unix-Format bietet crontab.guru.
  • Das Property CronType definiert wie der Wert des Properties Cron von der zugrundeliegenden Programmbibliothek interpretiert wird.
    Mögliche Werte sind die Konstanten aus CronType.
    Der Standardwert (UNIX) ist in MCR.Cronjob.Default.CronType definiert.
  • Das Property Contexts definiert in welchen Umgebungen der Cronjob aktiviert ist.
    Mögliche Werte sind die Konstanten WEBAPP und CLI. Es kann ein kommaseparierte Liste angegeben werden.
    Der Standardwert (WEBAPP) ist in MCR.Cronjob.Default.Contexts definiert.
  • Das Property Enabled bestimmt, ob der Cronjob grundsätzlich aktiviert ist.
    Mögliche Werte sind true und false.
    Der Standardwert (true) ist in MCR.Cronjob.Default.Enabled definiert.

Die Klasse MCRCommandCronJob zur Ausführung eines Kommandos implementiert zusätzlich das Property Command.
Dieses legt das auszuführende MyCoRe-Kommando fest.

Einen eigenen Cronjob implementieren

Wenn für einen Cronjob kein geeignetes MyCoRe-Kommando zur Verfügung steht, gibt es die Möglichkeit, die Klasse MCRCronjob zu erweitern.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MyCronJob extends MCRCronjob {

    public static final Logger LOGGER = LogManager.getLogger();

    private String foo;

    @Override
    public void runJob() {
        getProcessable().setStatus(MCRProcessableStatus.processing);
        getProcessable().setProgress(0);

        // do stuff

        getProcessable().setProgress(100);
    }

    public String getFoo() {
        return this.foo;
    }

    @MCRProperty(name = "Foo")
    public void setFoo(String foo) {
        this.foo = foo;
    }

    @Override
    public String getDescription() {
        return "Does something with " + getFoo();
    }
}
1
2
3
MCR.Cronjob.Jobs.MyOwnJob=de.my.cronjob.MyCronJob
MCR.Cronjob.Jobs.MyOwnJob.Cron=0 2 * * *
MCR.Cronjob.Jobs.MyOwnJob.Foo=bar

Die Methode runJob muss implementiert werden. Sie wird ausgeführt, wenn der im Cron Property definierte Zeitpunkt erreicht ist.
Die Methode getDescription generiert eine Beschreibung, die in der Webtools-Processable-Ansicht angezeigt wird.