SpringTask实现定时任务方法讲解

 更新时间:2023年02月15日 10:07:30   作者:龙贝子  
通过重写Schedu lingConfigurer方法实现对定时任务的操作,单次执行、停止、启动三个主要的基本功能,动态的从数据库中获取配置的定时任务cron信息,通过反射的方式灵活定位到具体的类与方法中

SpringTask是Spring自带的功能。实现起来比较简单。

使用SpringTask实现定时任务有两种方式:

1.注解方式

基于注解@Scheduled

@Scheduled(cron = "*/1 * * * * ?")
    public  void up(){
       System.out.println("定时任务开启:"+System.currentTimeMillis());
    }

cron表达式定义定时任务如何去执行。

2.配置文件xml方式

基于xml的方式【@Configuration + @ImportResource + xml】需要重启应用才能生效

配置xml文件,定义xml文件的名称为task.xml,放置文件在resources文件夹下:

xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
       http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
    <!--声明一个具有一个线程的池,如果定义多个,每个对象将获取同样的运行机会-->
    <task:scheduler id="sch" pool-size="10"/>
    <!--任务的调度类-->
    <bean id="scheduleTask" class="com.cloudtop.base.task.ScheduleTask"/>
    <!--引用线程池-->
    <task:scheduled-tasks scheduler="sch">
        <!--年报调度任务 5秒-->
        <task:scheduled ref="scheduleTask" method="yearReportTask" cron="0/5 * * * * ?"/>
    </task:scheduled-tasks>
 
</beans>

配置类加载xml文件

package com.cloudtop.base.task;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
/**
 * 加载调度的配置文件
 */
@Configuration
@ImportResource(locations={"classpath:task/task.xml"})//加载调度xml
public class SpringTaskConfig {
}

任务的调度类实现

package com.cloudtop.base.task;
import com.cloudtop.base.error.exception.BusinessException;
import com.cloudtop.core.service.EnvironmentUpService;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 定时任务类
 */
public class ScheduleTask {
    @Autowired
    EnvironmentUpService environmentUpService;
    public void yearReportTask() throws BusinessException {
        System.out.println("*******定时任务执行的业务代码******");
    }
}

最后,第一种使用注解@EnableSchedu ling开启定时任务,第二种使用xml的方式配置好上面的三个文件就开启了定时任务,不用使用注解@EnableSchedu ling来开启定时任务。

@SpringBootApplication
@ServletComponentScan
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
@EnableSchedu ling
public class CloudtopWebFrameApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(CloudtopWebFrameApplication.class);
    }
    /**
     * 主程序入口
     * 所有SpringBoot项目均采用main方法启动主程序,该部分为必须项
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(CloudtopWebFrameApplication.class, args);
    }
}

最后在控制台会输出结果:

到此这篇关于SpringTask实现定时任务方法讲解的文章就介绍到这了,更多相关SpringTask定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring sentinel哨兵模式相关原理解析

    Spring sentinel哨兵模式相关原理解析

    这篇文章主要介绍了Spring sentinel哨兵模式相关原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java8新特性教程之time包使用总结

    java8新特性教程之time包使用总结

    Java8新增了date和time的util包,下面这篇文章主要给大家介绍了关于java8新特性教程之time包使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • SpringBoot优化接口响应时间的九个技巧

    SpringBoot优化接口响应时间的九个技巧

    在实际开发中,提升接口响应速度是一件挺重要的事,特别是在面临大量用户请求的时候,本文为大家整理了9个SpringBoot优化接口响应时间的技巧,希望对大家有所帮助
    2024-01-01
  • 页面嵌入iframe Cookie丢失问题以及解决过程

    页面嵌入iframe Cookie丢失问题以及解决过程

    文章介绍了在页面嵌入iframe时遇到的cookie丢失问题,提出了解决方案:后端将cookie以链接参数的形式传递给前端,前端在请求接口时将cookie放在请求头中,后端通过拦截器解析并重新放置cookie
    2026-02-02
  • java调用python代码的两种实现方式:Runtime.exec()和Jython

    java调用python代码的两种实现方式:Runtime.exec()和Jython

    在Java中调用Python代码有多种方法,包括使用Runtime.exec()和第三方库如Jython,Runtime.exec()通过系统命令执行Python脚本,适用于简单的调用场景,Jython则是一个Python的Java实现,允许在Java中直接运行Python代码,适用于更深层次的集成需求
    2025-01-01
  • IDEA无法识别相关module模块问题的解决过程

    IDEA无法识别相关module模块问题的解决过程

    这篇文章主要给大家介绍了关于IDEA无法识别相关module模块问题的解决过程,文中通过图文介绍的非常详细,对大家学习或者使用IDEA具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Springboot过滤器禁止ip频繁访问功能实现

    Springboot过滤器禁止ip频繁访问功能实现

    这篇文章主要介绍了Springboot过滤器禁止ip频繁访问功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 使用JavaSE来模拟斗地主

    使用JavaSE来模拟斗地主

    这篇文章主要介绍了使用JavaSE来模拟斗地主,对棋牌游戏有研究的同学可以参考一下
    2021-04-04
  • Java异常处理与throws关键字用法分析

    Java异常处理与throws关键字用法分析

    这篇文章主要介绍了Java异常处理与throws关键字用法,结合实例形式分析了java常见的异常、错误处理及throws关键字相关使用技巧、注意事项,需要的朋友可以参考下
    2019-01-01
  • Java中浅拷贝与深拷贝实例解析

    Java中浅拷贝与深拷贝实例解析

    这篇文章主要给大家介绍了关于Java中浅拷贝与深拷贝的相关资料,拷贝对象是java中经常会遇到的问题,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09

最新评论