Skip to content

Commit d411ee6

Browse files
committed
Support for ScheduledExecutorService
1 parent 728f02e commit d411ee6

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

shedlock-spring/src/main/java/net/javacrumbs/shedlock/spring/SpringLockableTaskSchedulerFactory.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818
import net.javacrumbs.shedlock.core.DefaultLockManager;
1919
import net.javacrumbs.shedlock.core.LockProvider;
2020
import org.springframework.scheduling.TaskScheduler;
21+
import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler;
2122
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
2223

24+
import java.util.concurrent.ScheduledExecutorService;
25+
2326
/**
2427
* Helper class to simplify configuration of Spring LockableTaskScheduler.
2528
*/
@@ -36,6 +39,17 @@ public static LockableTaskScheduler newLockableTaskScheduler(TaskScheduler taskS
3639
return new LockableTaskScheduler(taskScheduler, new DefaultLockManager(lockProvider, new SpringLockConfigurationExtractor()));
3740
}
3841

42+
/**
43+
* Wraps ScheduledExecutorService and ensures that {@link net.javacrumbs.shedlock.core.SchedulerLock} annotated methods
44+
* are locked using the lockProvider
45+
*
46+
* @param scheduledExecutorService wrapped ScheduledExecutorService
47+
* @param lockProvider lock provider to be used
48+
*/
49+
public static LockableTaskScheduler newLockableTaskScheduler(ScheduledExecutorService scheduledExecutorService, LockProvider lockProvider) {
50+
return newLockableTaskScheduler(new ConcurrentTaskScheduler(scheduledExecutorService), lockProvider);
51+
}
52+
3953
/**
4054
* Creates {@link ThreadPoolTaskScheduler} and ensures that {@link net.javacrumbs.shedlock.core.SchedulerLock} annotated methods
4155
* are locked using the lockProvider
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.javacrumbs.shedlock.spring;
2+
3+
import net.javacrumbs.shedlock.core.LockProvider;
4+
import org.junit.Test;
5+
6+
import java.util.Date;
7+
import java.util.concurrent.ScheduledExecutorService;
8+
import java.util.concurrent.TimeUnit;
9+
10+
import static org.mockito.ArgumentMatchers.any;
11+
import static org.mockito.ArgumentMatchers.anyLong;
12+
import static org.mockito.ArgumentMatchers.eq;
13+
import static org.mockito.Mockito.mock;
14+
import static org.mockito.Mockito.verify;
15+
16+
public class SpringLockableTaskSchedulerFactoryTest {
17+
18+
19+
private LockProvider lockProvider = mock(LockProvider.class);
20+
private Runnable task = mock(Runnable.class);
21+
22+
@Test
23+
public void shouldWrapScheduledExecutorService() {
24+
ScheduledExecutorService scheduledExecutorService = mock(ScheduledExecutorService.class);
25+
LockableTaskScheduler lockableTaskScheduler = SpringLockableTaskSchedulerFactory.newLockableTaskScheduler(scheduledExecutorService, lockProvider);
26+
lockableTaskScheduler.schedule(task, new Date());
27+
verify(scheduledExecutorService).schedule(any(Runnable.class), anyLong(), eq(TimeUnit.MILLISECONDS));
28+
}
29+
30+
}

0 commit comments

Comments
 (0)