Crear su propio plugin de Crontab
Puede crear su propio plugin de Crontab.
Condiciones:
- La nueva clase de plugin de Crontab debe implementar la interfaz “CronAdapter”.
- La nueva clase de plugin de Crontab debe declararse bajo el paquete “com.openkm.plugin.cron”.
- La nueva clase de plugin de Crontab debe anotarse con “@PluginImplementation”.
- La nueva clase de plugin de Crontab debe extender “BaseCronPlugin”.
Interfaz CronAdapter:
package com.openkm.plugin.cron;
import net.xeoh.plugins.base.Plugin;
public interface CronAdapter extends Runnable, Plugin { /** * The cron name */ String getName();
/** * The default cron expression what will be registered the first time */ String getCronExpression();
/** * Return if task is running or not */ boolean isRunning();
/** * Cron task execution */ void execute() throws Throwable;}La nueva clase debe cargarse en el paquete com.openkm.plugin.cron porque el sistema de plugins de la aplicación intentará cargarla desde ahí.
Descripción de los métodos
Sección titulada «Descripción de los métodos»| Método | Tipo | Descripción |
|---|---|---|
| getName() | String | Devuelve el nombre del crontab. |
| getCronExpression | String | Devuelve la expresión cron. |
| isRunning | Boolean | Devuelve true cuando la tarea cron se está ejecutando. |
| execute | Void | Ejecuta la tarea cron. |
Ejemplo de implementación de un cron de disposición
Sección titulada «Ejemplo de implementación de un cron de disposición»package com.openkm.plugin.cron;
import com.openkm.api.OKMRepository;import com.openkm.bean.Folder;import com.openkm.module.db.stuff.DbSessionManager;import com.openkm.util.FileLogger;import net.xeoh.plugins.base.annotations.PluginImplementation;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;
@PluginImplementationpublic class TestCron extends BaseCronPlugin implements CronAdapter { private static Logger log = LoggerFactory.getLogger(TestCron.class); private static String LOG_NAME = "TestCron";
@Autowired private OKMRepository okmRepository;
@Override public String getName() { return "Cron test"; }
@Override public String getCronExpression() { return "0 * * * * *"; }
@Override public void execute() { try { FileLogger.info(LOG_NAME, ">>> Started"); // Use always system token in your cron String token = DbSessionManager.getInstance().getSystemToken(); Folder rootFolder = okmRepository.getRootFolder(token); FileLogger.info(LOG_NAME, "Root folder uuid: " + rootFolder.getUuid()); FileLogger.info(LOG_NAME, ">>> Finished"); } catch (Exception e) { log.error(e.getMessage()); } }}Entender el contexto de ejecución de la tarea crontab
Sección titulada «Entender el contexto de ejecución de la tarea crontab»Contexto de ejecución:
- La tarea crontab se ejecuta con el usuario interno llamado “system” ( la tarea no tiene una sesión de usuario válida ).
- La tarea crontab se ejecuta con el usuario administrador ( la tarea tiene una sesión de usuario válida ).
Es buena práctica usar el token de sistema al llamar a métodos de la API en una tarea crontab:
String systemToken = DbSessionManager.getInstance().getSystemToken();OKMFolder.getInstance().createSimple(systemToken, "/okm:root/test")