Java游戏服务器开发之十七--spring定时任务

    定时任务
        这里我们直接使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值