簡體   English   中英

shedlock - 不使用 spring @Scheduled 注釋

[英]shedlock - using without spring @Scheduled annotation

我試圖弄清楚如何在沒有 spring 的 @scheduled 注釋的情況下使用 shedlock(4.0.0 版本)。 我正在如下實現 SchedulingConfigurer.configureTasks 以為我的計划方法添加觸發任務。

@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));

您可以在ScheduledTaskRegistrar中使用net.javacrumbs.shedlock.spring.LockableTaskScheduler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM