This library provides a distributed lock based on DynamoDB. It uses conditional writes to check if a lock can be acquired.
<dependencies>
<dependency>
<groupId>com.foodpanda</groupId>
<artifactId>fleet-cron</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
compile 'com.foodpanda:fleet-cron:1.0.0'
Locker locker = new DynamoDbLocker(
dynamoDbClient,
"dynamoDbTable"
);
try {
if (locker.tryLock("lockKey", 10)) {
// do work
}
} finally {
locker.unlock("lockKey");
}
CronJobScheduler scheduler = new CronJobSchedulerFactory(locker).createScheduler("cron job name");
scheduler.scheduleAtFixedRate(
() -> System.out.println("I did some work"),
0, // Initial delay
2, // Every 2 seconds,
TimeUnit.SECONDS
);