如何使用@EnableScheduling和@Scheduled来完成Java当中的任务调度和定时任务

主要依靠 的注解是

@EnableScheduling

@Scheduled

 

 

例如说对于以下的代码:

@Component
@EnableScheduling
@Lazy(value = false)
public class FireWallOverMessage {

	@Autowired
	private SysBoardService sysBoardService;

	//每分钟自动结束会议
	@Scheduled(cron = "0 0/1 * * * ?")
	public void execute() {
		try {
			// 查找未结束会议
			List<String> ids = sysBoardService.checkBoard();
			if (ids != null&&ids.size()>0) {
				for (String id : ids) {
					Map<String,Object> sysBoard=sysBoardService.findOneById(id);
				    //.........................................................
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

其中@Scheduled 就是定时器的注解,它的cron以下的参数,加上了它表明了这是一个计划任务,不是马上开始的

 

CRON表达式    含义 
"0 0 12 * * ?"    每天中午十二点触发 
"0 15 10 ? * *"    每天早上10:15触发 
"0 15 10 * * ?"    每天早上10:15触发 
"0 15 10 * * ? *"    每天早上10:15触发 
"0 15 10 * * ? 2005"    2005年的每天早上10:15触发 
"0 * 14 * * ?"    每天从下午2点开始到2点59分每分钟一次触发 
"0 0/5 14 * * ?"    每天从下午2点开始到2:55分结束每5分钟一次触发 
"0 0/5 14,18 * * ?"    每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 
"0 0-5 14 * * ?"    每天14:00至14:05每分钟一次触发 
"0 10,44 14 ? 3 WED"    三月的每周三的14:10和14:44触发 
"0 15 10 ? * MON-FRI"    每个周一、周二、周三、周四、周五的10:15触发 

 

然后最开始的类的说明的地方我们要加入以下的注解

@Component
@EnableScheduling
@Lazy(value = false)
public class FireWallOverMessage

 

使用@EnableScheduling 表明它支持定时任务。

 

 

除了cron属性之外,@Scheduled还有以下的属性可以配置

zone

取服务器所在地的时区

fixedDelayString

上一次执行完毕时间点之后多长时间再执行

fixedRate

自项目开始的时候每隔几秒钟定时执行

fixedRateString

 

initialDelay

第一次延迟多长时间后再执行,可以同fixedRate组合使用

initialDelayString

 

 

在实际应用过程当中

你可以选择写一个配置类放 @EnableScheduling,启用该注解,然后再 在service中 用@scheduled 做 任务调度。

其中配置类类这样写:


@Configuration
@ComponentScan("")
@EnableScheduling //通过@EnableScheduling注解开启对计划任务的支持
public class TaskScheduleConfig {
}

然后在主程序启用它

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskScheduleConfig.class);
    }
}

最后service中加入 @scheduled注解的具体操作函数就行

这样做的好处是可以免去多余的一些类,当然你也可以像项目里做的那样。

 

多出一个文件夹,里面专门存放定时任务的类,写法就是一开始展示的那样

 

最后贴一个复杂的定时任务的分析

https://www.cnblogs.com/domi22/p/9418433.html

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值