abstractクラスを作っておきます。
public abstract class AbstractTask implements ICode { public void start() { Task task = new Task(this.getClass().getName()); Time startTime = getStartTime(); Duration duration = getDuration(); if (startTime != null) { if (Time.now().after(startTime)) { startTime = startTime.add(duration); } task.setStartTime(startTime); } task.run(duration, this); } protected abstract Time getStartTime(); protected abstract Duration getDuration(); }
getDurationに対してDuration.ONE_MINUTEを指定することで1分ごとに実行されるようになります。
public class MyTask extends AbstractTask { @Override protected Duration getDuration() { return Duration.ONE_MINUTE; } /** * @param log */ @Override public void run(Logger log) { try { AmazonSQS sqs = SQS.getClient(); ReceiveMessageResult receiveMessage = sqs.receiveMessage(new ReceiveMessageRequest("SQSのキューのURL") .withMaxNumberOfMessages(5) .withVisibilityTimeout(60 * 5) .withWaitTimeSeconds(20) .withMessageAttributeNames("All")); } catch (Throwable t) { error(t.getMessage(), t); } finally { } } }