网上找了很多资料,还是一头雾水。有人说是版本问题。折腾好几个版本。发现依然报错。
在这里插入图片描述
springboot的版本 2.1.5

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>3.0.0</version>
</dependency>

<!--shedlock-mongo 这里采用mongodb作为中间表用于记录任务信息-->
<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-provider-mongo</artifactId>
    <version>3.0.0</version>
</dependency>

解决方式:
发现在看源码的过程总是提示,LockProvider没有注册到bean里面去。
@Component 在代码中加入该注解,实际上该注解失效。

@Component
public class ScheduledLock {
    private static final int lockTime = 30000;

    @Scheduled(cron = "0/2 * * * * ?")
    @SchedulerLock(name = "scheduledTask", lockAtMostFor = lockTime, lockAtLeastFor = lockTime)
    public void run()
    {
        System.out.print(new Date().toString() + "\n");
    }
}

知道了问题所在。
关键点:在application启动类上加上@ComponentScan(basePackages = { “com.example.config”})
ScheduledLock类就在com.example.config下。通过@ComponentScan去扫描该包下面的东西。至此问题解决。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐