定时上线广告位

今天要做一个广告位定时上/下线的功能。

想到了要用定时任务定时执行,但是这样只能处理执行定时任务的这个时间点的任务。比如10点执行任务,其它如10:10、10:20、10:30……等等没法正点去执行。

开始是考虑的允许一个时间延迟,打一个时间差:10分钟执行一次,执行当前时间之前10分钟范围内的数据。

比如10点的时候,我执行9:50--10:00的数据。不过感觉太牵强了。

想到了定时发送邮件的功能,所以搜索到了:

https://blog.youkuaiyun.com/y1839/article/details/16986909
public class Test
{
    public static void main(String[] args)
    {
        Calendar calendar = Calendar.getInstance();
        
        /**
         * 指定触发的时间      现在指定时间为   2013年10月27号  15点  43 分 1 秒时触发
         */
        calendar.set(Calendar.DAY_OF_MONTH,27);//设置日期为27号
        calendar.set(Calendar.MONTH, 10);//设置日期为11月份   这里10表示11月份    11就表示12月份
        calendar.set(Calendar.HOUR_OF_DAY, 15); //设置15点的时候触发
        calendar.set(Calendar.MINUTE, 43); //设置43分钟的时候触发
        calendar.set(Calendar.SECOND, 1); //设置第一秒的时候触发
        
        Date time = calendar.getTime();
        Timer timer = new Timer();
        timer.schedule(new RemindTask(), time); 
    }
 
}

class RemindTask extends TimerTask {
    
    public void run() {
        System.out.println("你指定2013-11-27号15:34:01分执行已经触发!");
    }

}


才知道Timer有这个schedule方法可以用!

代码如下:

1、配置一个定时任务,半点执行

<!-- 定时器开关 -->

<task:annotation-driven />

<bean id="bannerTimer" class="com.jkhh.plat.timer.BannerTimer"></bean>  
  
 <task:scheduled-tasks>  
  <task:scheduled ref="bannerTimer" method="updateOffLine" cron="0 30 * * * ?" />

 </task:scheduled-tasks>  

2、定时任务查询出来此时间点往后一小时内所有需要处理的数据

public class BannerTimer {

@Autowired
private BannerService bannerService;

public void updateOffLine(){
try {
String beginTime = DateUtils.getCurrentDateTime(DateUtils.FORMAT1);
String endTime = DateUtils.dateAdd(4, beginTime, 1);
List<ScrolllBanner> needOffLineList = bannerService.needOffLineList(DateUtils.convertStringToDate(beginTime), DateUtils.convertStringToDate(endTime));
if(null != needOffLineList && needOffLineList.size() > 0){
for(ScrolllBanner banner : needOffLineList){

Calendar calendar = Calendar.getInstance();
      
       calendar.set(Calendar.DAY_OF_MONTH,banner.getOfflineTime().getDate());
       calendar.set(Calendar.MONTH, banner.getOfflineTime().getMonth());
       calendar.set(Calendar.HOUR_OF_DAY, banner.getOfflineTime().getHours()); 
       calendar.set(Calendar.MINUTE, banner.getOfflineTime().getMinutes()); 
       calendar.set(Calendar.SECOND, banner.getOfflineTime().getSeconds()); 
       
       Date time = calendar.getTime();
       Timer timer = new Timer();
       timer.schedule(new BannerOffLineTask(banner), time); 
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

}


3、执行任务

public class BannerOffLineTask extends TimerTask {


private ScrolllBanner banner;      
/**
* @param banner
*/
public BannerOffLineTask(ScrolllBanner banner) {
this.banner = banner;
}


@Override
public void run() {
BannerDao bannerDao = (BannerDao) SpringBeanUtils.getBean("bannerDao");
System.out.println("你指定的任务执行已经触发!"+banner.getOfflineTime()+" "+banner.getStatus());
bannerDao.offLine(banner);
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值