Spring boot 自带的Schedule--多实例

来源:互联网 发布:英孚网络课程怎么样 编辑:程序博客网 时间:2024/06/17 00:16

有时我们只需要简单的调度功能,那么使用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@Slf4jpublic 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

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

原创粉丝点击