我正在尝试找出如何在没有spring的@scheduled注解的情况下使用shedlock (4.0.0版本)。我正在实现SchedulingConfigurer.configureTasks,如下所示,为我的scheduled方法添加触发器任务。
@Component
public class EndpointSubTypeUpdateWorkerManager implements SchedulingConfigurer {
@Autowired
@Qualifier("priorityThreadPoolTaskExecutor")
private TaskExecutor executor;
@Autowired
@Qualifier("poolScheduler")
private TaskScheduler scheduler;
@Autowired
private LockProvider lockProvider;
AtomicLong counter = new AtomicLong();
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(scheduler);
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
startWorkerThreads();
log.debug("Running Schedular..." + Calendar.getInstance().getTime());
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
Calendar nextExecutionTime = new GregorianCalendar();
Date lastActualExecutionTime = triggerContext.lastActualExecutionTime();
nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date());
nextExecutionTime.add(Calendar.MILLISECOND, getNewExecutionTime());
return nextExecutionTime.getTime();
}
});
}
@SchedulerLock(name = "EndpointSubTypeUpdateWorkerManager_startWorkerThreads",
lockAtLeastFor = "2M", lockAtMostFor = "14M")
public void startWorkerThreads() {我尝试在上面的startWorkerThreads()方法中添加@SchedulerLock注释,但在日志中看到以下调试语句
2020-05-09 18:53:48,433 [ThreadPoolTaskScheduler1] DEBUG net.javacrumbs.shedlock.spring.aop.SpringLockConfigurationExtractor - Unknown task type com.west.schoolmessenger.globaldestinationregistry.worker.EndpointSubTypeUpdateWorkerManager$1@465885e5
2020-05-09 18:53:48,433 [ThreadPoolTaskScheduler1] DEBUG net.javacrumbs.shedlock.core.DefaultLockManager - No lock configuration for com.west.schoolmessenger.globaldestinationregistry.worker.EndpointSubTypeUpdateWorkerManager$1@465885e5. Executing without lock.我读到我可以使用下面的代码在外部调用shedlock,但不确定如何与上面的设置集成
LockingTaskExecutor executor = new DefaultLockingTaskExecutor(lockProvider);
...
Instant lockAtMostUntil = Instant.now().plusSeconds(600);
executor.executeWithLock(runnable, new LockConfiguration("lockName", lockAtMostUntil));发布于 2020-05-11 13:21:03
您可以在ScheduledTaskRegistrar中使用net.javacrumbs.shedlock.spring.LockableTaskScheduler
https://stackoverflow.com/questions/61706470
复制相似问题