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.