添加包

<dependency>

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

    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-provider-jdbc-template</artifactId>
    <version>2.2.0</version>
</dependency>
添加表

CREATE TABLE `shedlock` (
`name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`lock_until` timestamp(3) NULL DEFAULT NULL,
`locked_at` timestamp(3) NULL DEFAULT NULL,
`locked_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

添加config

import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.ScheduledLockConfiguration;
import net.javacrumbs.shedlock.spring.ScheduledLockConfigurationBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling; import javax.sql.DataSource;
import java.time.Duration; @Configuration
@EnableScheduling
public class ShedlockConfig { @Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
} @Bean
public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) {
return ScheduledLockConfigurationBuilder
.withLockProvider(lockProvider)
.withPoolSize(10)
.withDefaultLockAtMostFor(Duration.ofMinutes(10))
.build();
}
}
具体的定时任务
import net.javacrumbs.shedlock.core.SchedulerLock;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; @Component
@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") //重点地方
public class MarkRefreshScheduler { private final static Logger logger = LoggerFactory.getLogger(MarkRefreshScheduler.class); //每周一早上5点执行一次,用户的热度值和hot标识归零
@Scheduled(cron = "0 0/2 * * * ? ")
@SchedulerLock(name = "headNumCronName", lockAtMostFor = 5 * 1000, lockAtLeastFor = 5 * 1000)//重点地方
public void refreshHotSumAndIsOnTop() {
logger.info("begin refreshHotSumAndIsOnTop...");
//do something
logger.info("begin refreshHotSumAndIsOnTop..."); }
}
结果

通过修改数据库表中的数据实现锁

里面有四个字段

主键name:每个定时任务的一个名字

locked_at:锁的开始时间

lock_until:锁的结束时间

再定时开始时,会更新这两个时间,在时间之内的定时是不会被执行的

最新文章

  1. phpexcel读取输出操作
  2. 安装jdk
  3. 常用的Meta标签写法和作用
  4. python---filecmp
  5. tableview调用reloadData()之后界面不刷新显示
  6. 使用keil建立标准STM32工程模版(图文详细版!)
  7. apache开源项目-- OODT
  8. activity的生命周期详解
  9. Python+Django+SAE系列教程11-----request/pose/get/表单
  10. RecyclerView0基于使用
  11. 在React+Babel+Webpack环境中使用ESLint
  12. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本
  13. Spring与Mybatis整合
  14. docker 安装mysql
  15. Python3 与 C# 扩展之~基础拓展
  16. Json&amp;xml分析~
  17. 第一条:了解Objective-C语言的起源
  18. 1.print()与input()
  19. Linux系统中切换用户身份su与sudo的用法与实例
  20. Kafka设计解析(六)Kafka高性能架构之道

热门文章

  1. 不知道密码情况下 进行docker数据库可视化连接
  2. JFrog杰蛙DevOps平台
  3. 看TED演讲——Why you will fail to have a great career
  4. 《剑指Offer》-005 -用两个栈实现队列
  5. HDU6625: three arrays (字典树处理xor)
  6. windows命令查看端口占用情况
  7. combineReducers(reducers)
  8. win10怎么查看当前用户账号
  9. 第8章 动态SQL
  10. make命令与Makefile(转载)