Spring(一)定时任务

Spring(一)定时任务--基于注解

1.导入Spring的基础jar包
2.配置文件,引入task命名空间
<!-- 1.指定spring定时任务扫描的包 -->
<context:component-scan base-package="com.spring.task"></context:component-scan>
<!-- 2.开启定时任务注解驱动 ,多任务需配置线程池 -->
<task:annotation-driven scheduler="MyTask" />
<task:scheduler id="MyTask" pool-size="3"/>
3.定义第一个任务TestTaskA.java
package com.credit.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

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

@Component
public class TestTaskA {

	@Scheduled(cron="0/5 * * * * ?")
	public void TestRun() {
		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"---现在执行线程1,每15秒执行一次:");
		try {
			TimeUnit.SECONDS.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}	
}
4.定义第二个任务TestTaskB.java
package com.credit.util;

import java.text.SimpleDateFormat;
import java.util.Date;

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

@Component
public class TestTaskB {

	@Scheduled(cron="0/20 * * * * ?")
	public void TestRun2() {
		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"---现在执行线程2,每20秒执行一次:");
	}
}
5.没有配置线程池(默认单线程)执行时间上会有问题
6.配置了线程池,执行没有问题

Spring(一)定时任务--基于XML配置文件

1.配置文件
<!-- 1.指定spring定时任务扫描的包  -->
<context:component-scan base-package="com.spring.task"></context:component-scan>
<!--
	2.配置定时任务,多任务需配置线程池
	ref:指定关联的要执行的任务类,注意第一个字母必须小写
	method:指定在该类中要运行的任务方法
	cron:定时任务时间表达式 
	fixed-delay:从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。
	fixed-rate:从上一个任务开始到下一个任务开始的间隔,单位是毫秒。
-->
<task:scheduled-tasks scheduler="MyTask">
	<task:scheduled ref="testTaskA" method="TestRun" cron="0/5 * * * * ?"/>
	<task:scheduled ref="testTaskB" method="TestRun2" cron="0/20 * * * * ?"/>
</task:scheduled-tasks>
<task:scheduler id="MyTask" pool-size="2"/>
2.定义第一个任务TestTaskA.java
package com.credit.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import org.springframework.stereotype.Component;

@Component
public class TestTaskA {

	public void TestRun() {
		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"---现在执行线程1,每15秒执行一次:");
		try {
			TimeUnit.SECONDS.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
3.定义第二个任务TestTaskB.java
package com.credit.util;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.stereotype.Component;

@Component
public class TestTaskB {

	public void TestRun2() {
		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"---现在执行线程2,每20秒执行一次:");
	}
}
4.配置了线程池,执行结果

Spring(一)定时任务--cron常用表达式

0 0 12 * * ?每天中午12点执行
0 30 11  * * ?每天上午11:30执行
0 0 14 * * ? 20202020年每天下午2点执行
0 0 6,12,18 * * ?每天6点12点18点执行
0 0/30 1-8 * * ?每天上午1点到8点每30分钟执行
0 0 16 ? * FRI每周五16点执行
0 0 23 L * ?每月最后一日的23点执行
0 0 15 ? * MON-FRI每周一到周五15点执行





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值