首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shedlock -不使用spring @Scheduled注解

shedlock -不使用spring @Scheduled注解
EN

Stack Overflow用户
提问于 2020-05-10 10:36:56
回答 1查看 1.4K关注 0票数 0

我正在尝试找出如何在没有spring的@scheduled注解的情况下使用shedlock (4.0.0版本)。我正在实现SchedulingConfigurer.configureTasks,如下所示,为我的scheduled方法添加触发器任务。

代码语言:javascript
复制
@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注释,但在日志中看到以下调试语句

代码语言:javascript
复制
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,但不确定如何与上面的设置集成

代码语言:javascript
复制
LockingTaskExecutor executor = new DefaultLockingTaskExecutor(lockProvider);
...
Instant lockAtMostUntil = Instant.now().plusSeconds(600);
executor.executeWithLock(runnable, new LockConfiguration("lockName", lockAtMostUntil));
EN

回答 1

Stack Overflow用户

发布于 2020-05-11 13:21:03

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61706470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档