Spring定时任务(Spring Task)(推荐@Scheduled)

1. 定时器

项目开发中需要执行一些定时任务,比如在凌晨时候,更新一些新的信息,定时发送邮件等等

1.1. 实现方式

1.1.1. java.util.Timer
Java自带的java.util.Timer类,可以调度一个java.util.TimerTask任务。这种方式可以让程序按照某一个频度执行,但不能在指定的时间运行,一般用的比较少。
1.1.2. Quartz
使用Quartz,这是一个功能比较强大的调度器,可以让程序在指定的时间执行,也可以按照某一个频度执行,配置起来稍显复杂。
1.1.3. Spring Task
spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单。

1.2 .作业继承方式

一种方式是作业类需要继承特定的作业类基类,如Quartz需要继承:
org.springframework.scheduling.quartz.quartzJobBean;
java.util.Timer中需要继承自java.util.TimerTask。
另外一种即是一种普通的java类,不需要继承任何基类。
推荐使用第二种方式

2. Spring Task使用方式

2.1 配置方式
2.1.1 spring.xml

 <!--配置定时任务-->
    <task:scheduled-tasks>
        <task:scheduled ref="job1" method="run" fixed-rate="5000"/>
    </task:scheduled-tasks>

job1

public class job1 {
    public void run(){
        System.out.println("job1....."+new Date());
    }
}

每隔五秒执行一次job1的run
在这里插入图片描述

2.1.2 spring.xml
克隆表达式

<task:scheduled-tasks>
        <task:scheduled ref="job1" method="run" cron="0/5 * * * * ?"/>
 </task:scheduled-tasks>

job1见2.1.1的
每隔五秒执行一次run方法(https://www.pppet.net/)
在这里插入图片描述
2.2 注解方式
我们会用到 @Scheduled注解,在每个方法上使用 @Scheduled(fixedRate = 2000)或者 @Scheduled(cron = “0-5 * * ? * *”),配置时间
spring.xml

<!--启动定时任务的注解驱动-->
  <task:annotation-driven/>

job2

@Component
public class Job2 {
    @Scheduled(fixedRate = 2000)
    public void run1(){
        System.out.println("job2....."+new Date());
    }
}

每两秒运行一次
在这里插入图片描述

3 quartz的使用

一般使用上面的spring task即可,不用quartz定时任务
3.1 导入依赖

  <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.3.2</version>
 </dependency>
 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.3.2</version>
  </dependency>

3.2 spring.xml

	<!-- 线程池 -->
    <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="10" />
        <property name="maxPoolSize" value="100" />
        <property name="queueCapacity" value="500" />
    </bean>
    <!--FixedRate 定时任务 -->
    <bean id="quartzJob" class="com.wanmait.mavendemo.job.QuartzJob" />
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="quartzJob" />
        <property name="targetMethod" value="print" />
    </bean>


<!-- Cron   quartz-2.x 的配置  时间调度的两种写法 fixedRate和cron-->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" >
        <property name="jobDetail" ref="jobDetail" />
        <property name="cronExpression" value="0/5 * * * * ?" />
    </bean>
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail"></property>
        <property name="startDelay" value="0" />
        <!-- 调度工厂实例化后,经过 0 秒 开始执行调度 -->
        <property name="repeatInterval" value="2000" />
        <!--2 秒调度一次 -->
    </bean>
    <!-- 调度 看你用哪个 两种选一种   -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <!--<ref bean="simpleTrigger" />-->
                <ref bean="cronTrigger"/>
            </list>
        </property>
        <property name="taskExecutor" ref="executor" />
    </bean>

真正项目时候两种配置写一种就可以了,而且一般也使用spring task
**3.3 QuartzJob **

public class QuartzJob {
    public void print()
    {
        System.out.println("quartzjob.........."+new Date());
    }
}

Springboot的定时任务

在启动类上加@EnableScheduling即可开启定时任务
做一个任务类,加一个@Component注解来被spring管理,再在方法上加@Scheduled(fixedRate = 2000)或者 @Scheduled(cron = “0-5 * * ? * *”)

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Scheduled定时任务是一种在Spring Boot中创建定时任务的方式。目前主要有三种创建方式: 1. 基于注解(@Scheduled)的静态任务:通过在方法上添加@Scheduled注解来指定任务的执行时间。 2. 基于接口(SchedulingConfigurer)的动态任务:通过实现SchedulingConfigurer接口,可以根据数据库的内容动态调度任务。 3. 基于注解的多线程定时任务:通过使用@Scheduled注解和多线程来实现定时任务的并发执行。 在使用Spring Scheduled定时任务时,需要在启动类上添加@EnableScheduling注解来开启定时任务功能。然后可以在方法上使用@Scheduled注解来指定任务的执行时间,或者实现SchedulingConfigurer接口来添加定时任务。同时,可以配置定时任务的多线程非阻塞运行,以提高任务的并发性能。 以上是关于Spring Scheduled定时任务的简要介绍和使用方式。如果需要更详细的信息,可以参考引用\[1\]和引用\[2\]中的内容。 #### 引用[.reference_title] - *1* [SpringBoot之Scheduled定时任务详解](https://blog.csdn.net/weixin_41003771/article/details/102655202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [spring schedule定时任务详解](https://blog.csdn.net/qq_34480904/article/details/122410711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值