springboot 集成shedlock

1.数据创建表

CREATE TABLE shedlock(
    NAME VARCHAR(64), 
    lock_until TIMESTAMP(3) NULL, 
    locked_at TIMESTAMP(3) NULL, 
    locked_by  VARCHAR(255), 
    PRIMARY KEY (NAME)
)

2.增加pom


      net.javacrumbs.shedlock
      shedlock-spring
      2.2.1
    
    
      net.javacrumbs.shedlock
      shedlock-provider-jdbc-template
      2.2.1
    

3.yml文件增加配置连接数据库信息

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhsot:3306/intelligent_channel?useUnicode=yes&characterEncoding=utf8
    username: root1
    password: root1

4.springboot 启动主函数增加注解

@EnableSchedulerLock(defaultLockAtMostFor = "PT10M")
public class IntelligentchannelApplication {

  public static void main(String[] args) {
    SpringApplication.run(IntelligentchannelApplication.class, args);
  }
}

5.创建类SchduleConfig

import java.time.Duration;
import javax.sql.DataSource;
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;

@Configuration
@EnableScheduling
public class SchduleConfig{

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

6.创建定时job类

import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class TimeTaskJob {

  /*private static final int FOURTEEN_MIN = 14 * 60 * 1000;*/
  @Scheduled(cron = "0/1 * * * * ?")
  @SchedulerLock(name = "testJob")
  public void scheduledTask() {
    System.out.println("aaaaaaa");
  }

}

注意: 第5,6步创建的类必须在springboot主启动函数的扫描范围内

你可能感兴趣的:(springboot)