SpringBoot Scheduled 常见用法

简介: SpringBoot Scheduled 常见用法

外部统一管理可用 xxl-job ,将各定时任务集中管理,灵活改变执行频率,支持某一个定时器集群处理,避免多服务启动时,每个服务都执行(重复执行)

比如我的API服务里有一个定时任务,将API做成集群时,变成了 API1、API2、API3 ,这时候每个API都有定时任务。但我只能让一个执行,不能也没必要三个API都执行。就只能将定时任务独立成一个 应用发布,或者发布时只开启一个,另外两个不开启。

有了XXL-JOB,1、2、3只会轮训执行一次。

Spring 自带的 Schedule 用法

@Component
@EnableScheduling
public class CronTask1 {
    Logger taskLogger = LoggerFactory.getLogger(this.getClass());
    /**
     * @Scheduled除过cron还有三种方式:fixedRate,fixedDelay,initialDelay
     * cron:表达式可以定制化执行任务,但是执行的方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。
     * fixedRate:控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次。
     * fixedDelay:是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
     * initialDelay:initialDelay = 10000 表示在容器启动后,延迟10秒后再执行一次定时器。
     */
    @Scheduled(cron = "*/6 * * * * ?")
    public void crontabTask() {
        taskLogger.info("这是基于注解的方式的定时任务" + new Date());
    }
    //内部控制,可加条件判断是否要启用
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(() -> process(),
                triggerContext -> {
                    //每隔1分钟执行一次
                    String cron = "10,20 * * * * ?";
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                });
    }
    private void process() {
        String info = "这是基于接口的定时任务";
        System.out.println(info);
        taskLogger.info(info);
    }
}

多线程定时任务

@Component
@EnableScheduling
@EnableAsync
public class CronTask3 {
    Logger taskLogger = LoggerFactory.getLogger("crontabTask_3");
    @Async
    @Scheduled(fixedDelay = 10000)  //间隔10秒
    public void first() throws InterruptedException {
        System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
        taskLogger.info("第一个基于注解设定多线程定时任务");
        Thread.sleep(1000 * 10);
    }
    @Async
    @Scheduled(fixedDelay = 20000)
    public void second() {
        System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
        taskLogger.info("第二个基于注解设定多线程定时任务");
    }
}

 

目录
相关文章
|
2月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些高级用法
本文探讨了在Spring Boot项目中使用MongoDB的多种方式及其高级用法。MongoDB作为一种NoSQL数据库,在某些场景下相较于SQL数据库有着独特的优势。文中详细介绍了在Spring Boot中使用MongoDB的三种主要方式:直接使用官方SDK、使用Spring JPA以及使用MongoTemplate,并对比分析了它们之间的差异。此外,文章深入讲解了Spring Data MongoDB提供的各种注解(如@Id, @Document, @Field等)以简化操作流程,并探讨了MongoTemplate监听器的应用,如设置主键值、记录日志等。
144 2
|
2月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些骚操作用法
MongoDB作为一种NoSQL数据库,在不需要传统SQL数据库的表格结构的情况下,提供了灵活的数据存储方案。在Spring Boot中可以通过官方SDK、Spring JPA或MongoTemplate等方式集成MongoDB。文章重点介绍了Spring Data MongoDB提供的注解功能,例如`@Id`、`@Document`和`@Field`等,这些注解简化了Java对象到MongoDB文档的映射。此外,文中还讨论了MongoTemplate监听器的使用,包括设置主键值和日志记录等高级特性。
178 0
SpringBoot中MongoDB的那些骚操作用法
|
4月前
|
JSON Java 数据格式
Spring Boot 中的 @DateTimeFormat 和 @JsonFormat 的用法及作用
【6月更文挑战第11天】在开发 Spring Boot 应用时,处理日期和时间数据是一个常见的需求。Spring Boot 提供了两个注解 @DateTimeFormat 和 @JsonFormat 来帮助我们处理这些问题。
400 4
|
4月前
|
前端开发 Java 开发者
深入理解 Spring Boot 注解:核心功能与高级用法详解
深入理解 Spring Boot 注解:核心功能与高级用法详解
247 1
|
5月前
|
Java 开发者 Spring
Springboot中的@Bean用法以及常见问题
【5月更文挑战第27天】@Bean 注解是Spring框架中用于声明Spring应用上下文中的bean的一种方式。在Spring Boot中,@Bean注解通常与@Configuration注解一起使用,在配置类(Configuration class)中定义bean。
109 2
|
5月前
|
XML Java API
springboot 常用的注解标签的概念及用法RequiredArgsConstructor 、RestController、RequestMapping
【4月更文挑战第12天】在 Spring Boot 中,@RequiredArgsConstructor, @RestController, 和 @RequestMapping 是常用的注解,每个都有其特定的功能和用法,它们合起来极大地简化了 Spring 应用程序的开发过程。
194 2
|
5月前
|
安全 Java Spring
springboot @Resource、@AutoWaire的用法实战
【4月更文挑战第3天】在Spring Boot中,@Autowired和@Resource注解都用于自动注入依赖,但它们在底层工作方式和使用的场合上存在一些差异。理解这些差异有助于更有效地使用Spring框架。
176 1
|
5月前
|
存储 Java 数据库连接
springboot ConstraintValidator的概念与用法
【4月更文挑战第25天】在 Java 中,ConstraintValidator 是用于自定义注解验证的接口,属于 Bean Validation(JSR 303 和 JSR 349)标准的一部分。这个接口定义了如何实施一个特定的约束注解的验证逻辑。
202 0
|
5月前
|
前端开发 Java Maven
spring boot3参数校验基本用法
spring boot3参数校验基本用法
200 2
|
XML Java 数据格式
SpringBoot入门(五) 之 @ConfigurationProperties和@Value的区分与用法
SpringBoot入门(五) 之 @ConfigurationProperties和@Value的区分与用法
145 0