springboot根据启动文件关闭定时任务的解决方法

 更新时间:2025年08月29日 10:43:45   作者:追逐梦想永不停  
本文给大家介绍springboot根据启动文件关闭定时任务的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、前言

项目里有3个配置文件:

//生产环境用
application-prod.yml
//测试环境用
application-test.yml
//本地启动用
//为什么本地不用test?因为测试环境是linux系统,本地是windows系统,路径不一致,本地有盘符,还是得区分开
application-dev.yml

现在想让本地dev启动时,不执行定时任务,防止定时任务误启动导致影响测试环境。

代码也不想改动太多。

二、解决方法

找到了一种最小的改动方法。

1.如果是springboot项目启动类里加了@EnableScheduling注解,那就先把这个注解拆出来,不要加,如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

2.单独建一个定时任务配置java类,如下:

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@Profile("!dev")  // 非 dev 环境启用定时任务
@EnableScheduling
public class SchedulingConfig {
  //这个配置类为空类即可,不需要内容
}

其中,@Configuration是标志这个类是配置类,加了springboot启动时,才会扫描到这个类;

@EnableScheduling注解标志启用定时任务功能,有了这个,其他类配置的定时任务@Scheduled(cron = "0 0/30 * * * ?")这种才会生效;

@Profile("!dev")表示,只有启动配置文件不是dev,才会加载这个类,如果是dev就不加载。

只有加载了这个类,才有@EnableScheduling注解,才会开启定时任务执行;
如果不加载这个类,那就相当于没有@EnableScheduling注解,其他类配置的定时任务@Scheduled(cron = "0 0/30 * * * ?")不会生效,也就不会执行。

3.当application.yml里用这个启动时:

spring:
  profiles:
    active: dev

或者启动java项目用参数-Dspring.profiles.active=dev时(这个优先级高,会覆盖application.yml的配置):

就说明启动参数是dev,后续读取application-dev.yml文件;

因为启动参数是dev,所以根据@Profile("!dev") ,不加载java文件,没有开启定时任务注解,也就不会执行定时任务了。

4.可以测试,如果开启了定时任务,控制台就会有这个日志,搜索Scheduler(没有开启就没有):

11:38:38.520 [main] INFO  o.s.s.c.ThreadPoolTaskScheduler - [initialize,181] - Initializing ExecutorService 'taskScheduler'

到此这篇关于springboot根据启动文件关闭定时任务的文章就介绍到这了,更多相关springboot启动文件关闭定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中File文件操作类的超详细使用教程

    Java中File文件操作类的超详细使用教程

    File类在包java.io.File下、代表操作系统的文件对象(文件、文件夹),File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能,下面这篇文章主要给大家介绍了关于Java中File文件操作类的超详细使用教程,需要的朋友可以参考下
    2023-01-01
  • java中SPI服务提供者的接口使用总结

    java中SPI服务提供者的接口使用总结

    SPI英文全称为Service Provider Interface,顾名思义,服务提供者接口,它是jdk提供给“服务提供厂商”或者“插件开发者”使用的接口
    2022-02-02
  • SpringBoot中ApplicationEvent和ApplicationListener用法小结

    SpringBoot中ApplicationEvent和ApplicationListener用法小结

    这篇文章介绍SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ队列虽然实现的功能相似,但是MQ还是有其不可替代性的,最本质的区别就是MQ可以用于不同系统之间的消息发布,而SpringEvent这种模式只能在一个系统中,需要的朋友可以参考下
    2023-03-03
  • SpringMVC文件上传的配置实例详解

    SpringMVC文件上传的配置实例详解

    本文通过实例代码给大家介绍SpringMVC文件上传的配置相关内容,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • Quartz与Spring集成的两种方法示例

    Quartz与Spring集成的两种方法示例

    这篇文章主要为大家介绍了Quartz与Spring集成的两种方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Spring Boot通过Junit实现单元测试过程解析

    Spring Boot通过Junit实现单元测试过程解析

    这篇文章主要介绍了Spring Boot通过Junit实现单元测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • java shiro实现退出登陆清空缓存

    java shiro实现退出登陆清空缓存

    本篇文章主要介绍了java shiro实现退出登陆清空缓存,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Spring BPP中如何优雅的创建动态代理Bean详解

    Spring BPP中如何优雅的创建动态代理Bean详解

    这篇文章主要给大家介绍了关于Spring BPP中如何优雅的创建动态代理Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • RabbitMQ TTL机制实践建议

    RabbitMQ TTL机制实践建议

    RabbitMQ提供的TTL(Time to Live,过期时间)特性恰好满足这一需求,它支持对单个消息和整个队列分别设置过期时间,灵活适配不同业务场景,本文给大家介绍RabbitMQ TTL机制实践建议,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • 关于Mybatis 中使用Mysql存储过程的方法

    关于Mybatis 中使用Mysql存储过程的方法

    这篇文章给大家介绍了Mybatis 中使用Mysql存储过程的方法,本文通过实例代码相结合的形式给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2018-03-03

最新评论