Spring Boot手把手教学(13):如何自定义开启定时任务

  • 1、前言
  • 2、添加自定义属性
  • 3、定时任务开关
  • 4、切换不同环境

    • 4.1、 dev
    • 4.2、test
    • 4.3、prod

1、前言

前面我们讲了定时任务,并且实例说明如何利用爬虫获取天气信息并定时发邮件提醒;

那么假设我们有三种环境分别是:dev(本地开发环境)、test(UAT测试环境) 和 prod(生产环境);

那么如何根据不同环境决定是否激活定时任务呢?

如果不知道如何自定义三种环境,请参考之前的文章Spring Boot手把手教学(2):使用yml多环境配置和创建多环境profile打包

2、添加自定义属性

Pom.xml

默认Dev环境

<profiles>
        <profile>
            <!-- 开发环境 -->
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <!-- 默认激活的环境 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <!-- 测试环境 -->
            <id>test</id>
            <properties>
                <profileActive>test</profileActive>
            </properties>
        </profile>
        <profile>
            <!-- 生产环境 -->
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>
    </profiles>
复制代码
src/main/resources/application.yml
spring:
  profiles:
    active: @profileActive@
复制代码
src/main/resources/application-dev.yml
## 开启定时任务
scheduling:
  enabled: false
复制代码
src/main/resources/application-test.yml
## 开启定时任务
scheduling:
  enabled: true
复制代码
src/main/resources/application-prod.yml
## 开启定时任务
scheduling:
  enabled: true
复制代码

三种环境,分别添加自定义属性;

3、定时任务开关

com.scaffold.test.config.SchedulingConfig

添加定时任务配置

package com.scaffold.test.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;


/**
 * 定时任务开关
 */

@Configuration
//启用定时任务
@EnableScheduling
//配置文件读取是否启用此配置
@ConditionalOnProperty(prefix = "scheduling", name = "enabled", havingValue = "true")
public class SchedulingConfig {
}

复制代码

这个时候我们把启动类上的 @EnableScheduling
单独移到了新建的配置类中,这样方便自定义控制;然后通过 @ConditionalOnProperty
启动自动获取配置属性 scheduling
,默认为true, 定时任务默认开启;

到此为止,如果在预想正确的情况:


dev环境:不开启

test环境:开启

prod环境:开启

复制代码

那么如何判定呢?我们在之前的例子中,定时获取天气信息,间隔是1个小时,在启动server的时候,默认第一次执行,

所以,我们以此为依据进行判定是否生效;

4、切换不同环境

4.1、 dev

Spring Boot手把手教学(13):如何自定义开启定时任务
Spring Boot手把手教学(13):如何自定义开启定时任务

没有执行爬虫插入的sql, 所以,dev环境没有开启定时任务, 验证通过

4.2、test

Spring Boot手把手教学(13):如何自定义开启定时任务
Spring Boot手把手教学(13):如何自定义开启定时任务

有sql执行,定时任务生效, 验证通过

4.3、prod

Spring Boot手把手教学(13):如何自定义开启定时任务
Spring Boot手把手教学(13):如何自定义开启定时任务

验证通过

到此为止,说明自定义激活定时任务的配置已经成功了,感兴趣的小伙伴赶紧去试试吧。

本文使用 mdnice
排版

原文 

https://juejin.im/post/5f01dde3e51d453467219858

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring Boot手把手教学(13):如何自定义开启定时任务

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址