Hi,
I need to use a scheduler to start a task once a day to import CSV files into a plugin’s tables. But I’m a bit lost on which scheduler to use… SAL? Atlassian Scheduler? PluginScheduler?
For the record, I tried with PluginScheduler, but the task is not launched. Maybe I’m missing something about component registration.
@Scanned
public class ComposanteSchedulerImpl implements ComposanteScheduler, LifecycleAware {
private static final Logger log = LoggerFactory.getLogger(ComposanteSchedulerImpl.class);
private long interval = 50000L; // default job interval (5 sec)
private static final String JOB_NAME = ComposanteSchedulerImpl.class.getName() + ":job";
/* package */ static final String KEY = ComposanteSchedulerImpl.class.getName() + ":instance";
@ComponentImport
private final PluginScheduler scheduler;
@Inject
public ComposanteSchedulerImpl(@ComponentImport PluginScheduler scheduler) {
this.scheduler = checkNotNull(scheduler);
}
public void onStart() {
reschedule(interval);
}
public void reschedule(long interval) {
this.interval = interval;
scheduler.scheduleJob(
JOB_NAME, // unique name of the job
TacheImportationCSV.class, // class of the job
new HashMap<String, Object>() {{
put(KEY, ComposanteSchedulerImpl.this);
}}, // data that needs to be passed to the job
new Date(), // the time the job is to start
interval); // interval between repeats, in milliseconds
log.info(String.format("Import Casewise %dms", interval));
}
}
And the implementation:
public class TacheImportationCSV implements PluginJob {
@ComponentImport
private final ActiveObjects ao;
@Inject
public TacheImportationCSV(@ComponentImport ActiveObjects ao) {
this.ao = checkNotNull(ao);
}
public void execute(Map<String, Object> jobDataMap) {
...
}