spring配置定时任务的几种方式

原文出处 https://www.cnblogs.com/zhaoletian/p/10821426.html

spring配置定时任务的几种方式

多种实现定时任务的方式的记录。

1、基于注解方式的定时任务

  首先spring-mvc.xml的配置文件中添加约束文件

xmlns:task="http://www.springframework.org/schema/task" 
http://www.springframework.org/schema/task  
http://www.springframework.org/schema/task/spring-task-3.2.xsd 

其次需要配置注解驱动

<task:annotation-driven />

添加你添加注解的扫描包

<context:component-scan base-package="com.xxx.xxx" />

最后贴上定时任务包代码

 

package com.xxx.xxx;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class xxxTask {
    @Scheduled(cron = "0/5 * * * * ? ") // 间隔5秒执行
    public void xxx() {
        System.out.println("----定时任务开始执行-----");
    //执行具体业务逻辑----------  
        System.out.println("----定时任务执行结束-----");
    }
}

 

2、基于配置的定时任务调度框架Quartz

引入依赖

<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
  <version>2.2.3</version>
</dependency>

  定义一个类,方法可以写多个为需要定时执行的任务

public class AdminJob {
    
    public void job1() {
        System.out.pringln("执行了任务---");
    }
}

在spring.xml配置中添加

 

 <bean id="adminJob" class="com.xxx.xxx.AdminJob"/>
    <!--此处id值为需要执行的定时任务方法名-->
    <bean id="job1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="adminJob"/>
        <property name="targetMethod" value="job1"/>
    </bean>
<!--此处为定时任务触发器-->
    <bean id="job1Trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref bean="job1"/>
        </property>
        <property name="cronExpression">
            <value>0 15 0 16 * ?</value>
        </property>
    </bean>

 

 

<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="job1Trigger"/>
        </list>
    </property>
    <property name="taskExecutor" ref="executor"/>
</bean>
    <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>

 

 3、最后还有一种普通java的定时任务代码 基于线程池的方式实现定时任务

 

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
  public static void main(String[] args) {
    Runnable runnable = new Runnable() {
      public void run() {
        // task to run goes here
        System.out.println("Hello !!");
      }
    };
    ScheduledExecutorService service = Executors
                    .newSingleThreadScheduledExecutor();
    service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值