定时任务
这里我们直接使用spring的定时任务注解,Scheduled
修改的地方主要是2个,
添加
ScheduledTask
修改
ApplicationContext.xml
先说下配置文件ApplicationContext.xml
在文件中加入这个标签,就相当于开启了。之前的代码中有,被我注释掉了。
<!--定时任务-->
<task:annotation-driven/>
然后就是直接写一个定时类ScheduledTask
使用Component注解交给spring管理
在里面随便写个方法,在方法上加上@Scheduled(fixedRate = 3000)注解,
fixedRate = 3000 表示3秒执行一次
这里扩展下,这个括号里面的参数一般有三个fixedDelay/fixedRate/cron,在fixedDelay和fixedRate都是跟着时间(毫秒单位)
可以看下这篇https://blog.csdn.net/kypfos/article/details/77882876
(T是任务,W是间隔时间,假设是5秒的间隔)
fixedRate: 不管内部执行过程,到时间就执行一次
T1.T1WWWT2.T2.T2WW.T3.T3.T3.T3.T3.T4.T4.T4.T4.T4.T4.T4T5T5WWWT6.T6........
fixedDelay: 在上一个执行完毕之后,执行下一个任务
T1.T1.WWWWW.T2.T2.T2WWWWW.T3.T3.T3.T3.T3.WWWWW.T4.T4.T4.T4.T4.T4.T4.WWWWWT6.T6......
cron是一个表达式 可以看下这篇https://www.cnblogs.com/ark-blog/p/9000079.html
字段名 含义 允许的值 允许的特殊字符
seconds 秒 0-59 , - * /
minutes 分 0-59 , - * /
hours 小时 0-23 , - * /
daysOfMonth 日 1-31 , - * ? / L W C
months 月 1-12 or JAN-DEC , - * /
daysOfWeek 周几 1-7 or SUN-SAT , - * ? / L C #
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
看下具体的代码
ScheduledTask
/*
* Copyright (C), 2015-2018
* FileName: ScheduledTask
* Author: zhao
* Date: 2018/7/19 15:05
* Description: 定时任务
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.lizhaoblog.server.biz.scheduled;
import com.lizhaoblog.base.session.Session;
import com.lizhaoblog.base.session.SessionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* 〈一句话功能简述〉<br>
* 〈定时任务〉
*
* @author zhao
* @date 2018/7/19 15:05
* @since 1.0.1
*/
@Component
@Scope("singleton")
public class ScheduledTask {
private static final Logger logger = LoggerFactory.getLogger(ScheduledTask.class);
private int count = 0;
@Scheduled(fixedRate = 15000)
public void test() {
count++;
Session[] sessionArray = SessionManager.getInstance().getSessionArray();
int length = sessionArray.length;
logger.info("ScheduledTask " + count + " 在线人数:" + length);
}
}
上面的代码在码云上 https://gitee.com/lizhaoandroid/JgServer
可以加qq群一起探讨Java游戏服务器开发的相关知识 676231564