diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java index 9da7146a77e8571f779809b53f47f643763d043e..afd81ddf317b067eb3561ada0eaa6a463d5ece97 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java @@ -1,5 +1,6 @@ package ch.systemsx.cisd.etlserver; +import java.util.Date; import java.util.Timer; import java.util.TimerTask; @@ -31,13 +32,21 @@ public class MaintenancePlugin { final String timerThreadName = parameters.getPluginName() + " - Maintenance Plugin"; final Timer workerTimer = new Timer(timerThreadName); - workerTimer.schedule(new TimerTask() + TimerTask timerTask = new TimerTask() { @Override public void run() { task.execute(); } - }, parameters.getStartDate(), parameters.getIntervalSeconds() * 1000); + }; + Date startDate = parameters.getStartDate(); + if (parameters.isExecuteOnlyOnce()) + { + workerTimer.schedule(timerTask, startDate); + } else + { + workerTimer.schedule(timerTask, startDate, parameters.getIntervalSeconds() * 1000); + } } } \ No newline at end of file diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java index f3061cbe9c3142f5cdb5c0b82447fd4320121ee4..939605d887c68f0aca562c4b2d86e10af98524b8 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java @@ -44,6 +44,10 @@ public class MaintenanceTaskParameters private static final String START_KEY = "start"; + // If true the task will be executed exactly one, interval will be ignored. By default set to + // false. + private static final String ONE_TIME_EXECUTION_KEY = "execute-only-once"; + private final String pluginName; private final long interval; @@ -54,6 +58,8 @@ public class MaintenanceTaskParameters private final Date startDate; + private final boolean executeOnlyOnce; + public MaintenanceTaskParameters(Properties properties, String pluginName) { this.properties = properties; @@ -61,6 +67,7 @@ public class MaintenanceTaskParameters interval = PropertyUtils.getLong(properties, INTERVAL_KEY, ONE_DAY_IN_SEC); className = PropertyUtils.getMandatoryProperty(properties, CLASS_KEY); startDate = extractStartDate(PropertyUtils.getProperty(properties, START_KEY)); + executeOnlyOnce = PropertyUtils.getBoolean(properties, ONE_TIME_EXECUTION_KEY, false); } private static Date extractStartDate(String timeOrNull) @@ -92,6 +99,11 @@ public class MaintenanceTaskParameters } } + public boolean isExecuteOnlyOnce() + { + return executeOnlyOnce; + } + public long getIntervalSeconds() { return interval;