Spring boot 自带的Schedule--多实例

有时我们只需要简单的调度功能,那么使用Spring boot 自带的Schedule就可以满足了、
要是需要复杂的管控,就使用Quartz框架,请参阅Spring boot下使用quartz
h和Spring boot下使用quartz–多实例
这章讲述的是Spring boot 自带的Schedule-多实例解决方法

1. pom.xml
引入基本的依赖就好了

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.programmer</groupId>
  <artifactId>spring-boot-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>spring-boot-task2</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
  </properties>

    <!-- spring boot parent节点,引入这个之后,在下面和spring boot相关的就不需要引入版本了; -->
    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.4.1.RELEASE</version>
    </parent>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>   
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <!-- shedlock -->
        <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-spring</artifactId>
            <version>0.12.0</version>
        </dependency>
        <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-provider-jdbc-template</artifactId>
            <version>0.12.0</version>
        </dependency>
        <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-provider-jdbc</artifactId>
            <version>0.12.0</version>
        </dependency>
  </dependencies>
</project>

2. 配置文件

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.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//DruidAutoConfiguration是连接数据库的配置文件,因为要在数据库加载完成之后在执行该配置
//不懂的可以参考[Spring boot下使用quartz--多实例](http://blog.csdn.net/yy756127197/article/details/75980459) 文末
@AutoConfigureAfter(DruidAutoConfiguration.class)
public class SchduleConfig {

    @Bean
    public LockProvider lockProvider(DataSource ds) {
    //test_shedlock 是数据表
        return new JdbcTemplateLockProvider(ds,"test_shedlock");
    }

    @Bean
    public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
        return ScheduledLockConfigurationBuilder
            .withLockProvider(lockProvider)
            .withPoolSize(10)
            .withDefaultLockAtMostFor(Duration.ofMinutes(10))
            .build();
    }   

}

3. 实现类

import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service //也可以是@Component
@EnableScheduling
@Slf4j
public class ScheduleTaskService {

    @Scheduled(fixedDelayString = "${schedule.test.time}")
    @SchedulerLock(name = "scheduleTest", lockAtLeastForString = "${schedule.test.time}", lockAtMostForString = "${schedule.test.time}" )
    public void schdule(){
        log.info("====调用Spring Schedule 开始====");
    }
}

schedule.test.time = 60000 是配置在application.properties中的,也可以直接写死在代码里

4. 数据表 test_shedlock

CREATE TABLE public.test_shedlock (
    name varchar(64) NOT NULL,
    lock_until timestamp NULL,
    locked_at timestamp NULL,
    locked_by varchar(255) NULL,
    CONSTRAINT shedlock_pkey PRIMARY KEY (name)
)
WITH (
    OIDS=FALSE
);

启动两个实例测试,VERY GOOD

喜欢请点赞,不懂请留言^^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java Spring Boot中的ScheduledExecutorService是一个Java定时器工具类,可以用于在Spring Boot应用程序启动时启动和运行任务。你可以使用自定义的定时器工具类,结合Spring Boot一起使用。另外,你也可以使用ScheduledExecutorService接口提供的方法来创建一个定时任务执行线程池。例如,在Spring Boot中,你可以通过@Bean注解来创建一个ScheduledExecutorService实例,并将其注入到需要使用的地方。这样,你就可以使用这个线程池来执行周期性的定时任务。如果在Spring Boot中找不到默认的ScheduledExecutorService实例,系统将会抛出NoSuchBeanDefinitionException异常,并打印出相应的错误信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [自定义Java-ScheduledExecutorService定时器.jar](https://download.csdn.net/download/wsk1103/10230495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [scheduledexecutorservice 的使用_SpringBoot @Schedule使用注意与原理](https://blog.csdn.net/weixin_39574869/article/details/110998360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [spring boot.定时任务问题记录(TaskScheduler/ScheduledExecutorService异常)](https://blog.csdn.net/acj2008/article/details/101941093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值