网上看到好多关于定时任务的讲解,以前只简单使用过注解方式,今天项目中看到基于配置的方式实现定时任务,自己做个总结,作为备忘录吧。

基于注解方式的定时任务

  首先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("----定时任务执行结束-----");
}
}

基于配置的定时任务调度框架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>

最后还有一种普通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);
}
}

最新文章

  1. JavaWeb_day04搜索_乱码_路径_转发重定向_cookie
  2. 学习SAP HANA SQL
  3. lisp中的cons
  4. Java总结(一):封装——Encapsulation
  5. Android Studio 2.2 来啦
  6. Codeforces Round #320 (Div. 2) D. &quot;Or&quot; Game 数学
  7. .Net设计模式_工厂模式(2)
  8. IT新人养成与蘑菇理论
  9. include 和 require 的区别
  10. C# Exception类
  11. SQLServer批量备份与还原
  12. jvm原理及调优
  13. 每天一个Linux命令(20)--find命令之exec
  14. win7 VMware CentOS桥接(bridge)模式网络配置
  15. Java网络通信协议、UDP、TCP类加载整理
  16. Python装饰器基础及运行时间
  17. Windows服务器支持json文件
  18. [C#]记一次解析XML转对象的笔记
  19. Android井字游戏(二)游戏界面
  20. Inteiilj IDEA 团队代码格式规范

热门文章

  1. python基础(变量、基础数据类型、流程控制)
  2. .netcore mongodb 分页+模糊查询+多条件查询
  3. 在Windows QT下使用ZeroMQ
  4. LeetCode 141、142环形链表
  5. CoreData编辑器
  6. java多线程的应用场景
  7. 数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看
  8. 如何下载github项目中的某一部分
  9. Vagrant基本命令详解
  10. Java——利用反射机制将表单数据自动填充到JavaBean中