Spring 的定时器书写方法

1. 定时器注入的方法以及逻辑

package com.wytech.Timer;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.opensymphony.xwork2.ActionContext;
import com.wytech.context.Constant;
import com.wytech.dao.UserCreditDao;
import com.wytech.domain.AwardLog;
import com.wytech.domain.Message;
import com.wytech.domain.User;
import com.wytech.domain.UserCredit;
import com.wytech.service.AwardService;
import com.wytech.service.MessageService;
import com.wytech.service.UserCreditService;
import com.wytech.service.UserService;
import com.wytech.service.impl.AwardServiceImpl;

public class Timer {
 private Logger logger=Logger.getLogger(Timer.class);
 private AwardService awardService;
    private UserCreditService userCreditService;
    private UserCreditDao userCreditDao;
    private UserService userService;
    private MessageService messageService;
   
   
 public MessageService getMessageService() {
  return messageService;
 }
 public void setMessageService(MessageService messageService) {
  this.messageService = messageService;
 }
 public UserService getUserService() {
  return userService;
 }
 public void setUserService(UserService userService) {
  this.userService = userService;
 }
 public AwardService getAwardService() {
  return awardService;
 }
 public void setAwardService(AwardService awardService) {
  this.awardService = awardService;
 }
 public UserCreditService getUserCreditService() {
  return userCreditService;
 }
 public void setUserCreditService(UserCreditService userCreditService) {
  this.userCreditService = userCreditService;
 }
 public UserCreditDao getUserCreditDao() {
  return userCreditDao;
 }
 public void setUserCreditDao(UserCreditDao userCreditDao) {
  this.userCreditDao = userCreditDao;
 }
 /**
  * 我的钱票到期提醒提前三天
  * 每天早上6点执行
  * 在applictionTimer.xml中配置时间
  */
 public void doMyUserQianPiao(){
  logger.debug("定时器计算我的钱票信息每天早上6点执行");
  //返回所有的用户中奖的钱票信息
  List<AwardLog> list = awardService.awardLog_qianpiao();
  //创建记录钱票过去的用户信息
  List<AwardLog> listCount = new ArrayList<AwardLog>();
  boolean flag = true;
  for (int i = 0; i < list.size(); i++) {
   //得到添加的时间
   long addtime = list.get(i).getAddtime();
   //把日期加半年减去3天 
   String tixingTime = showDate(addtime+"",6,-3);
   //得到现在的日期
   String nowTime = GetNowDate();
   //提醒时间和今天的日期比对一样就提醒改用户钱票快到期了
   if (tixingTime == nowTime || tixingTime.equals(nowTime)) {
    //说明今天查到了即将过期的钱票信息
    //判断记录钱票过期的用户信息是否有信息
    if (listCount.size() == 0) {
     //为0说明还有信息创建一个
     AwardLog al = new AwardLog();
     al.setUser_id(list.get(i).getUser_id());
     //设置有一张钱票即将过期
     al.setContent(1);
     listCount.add(al);
    } else {
     // 判断如果记录钱票过期的用户信息的集合不为空说明有记录了已经
     if (listCount.size() != 0) {
      // 有记录 查询是否有当前用户的信息
      for (int j = 0; j < listCount.size(); j++) {
       // 说明当前用户在钱票过期集合里面有了 那么就 count +1
       if (list.get(i).getUser_id() == listCount.get(j).getUser_id()) {
        listCount.get(j).setContent(listCount.get(j).getContent() + 1);
        //如果找到了记录为false;
        flag = false;
       }
      }
      if (flag) {
       // 记录集合中没有就新加一条
       AwardLog al = new AwardLog();
       al.setUser_id(list.get(i).getUser_id());
       // 设置有一张钱票即将过期
       al.setContent(1);
       listCount.add(al);
      }
     }
    }
   }
  }
  //在for最外层的外面  遍历记录即将到期的钱票信息
  for (int i = 0; i < listCount.size(); i++) {
   //定义并创建发送站内信息的对象
   Message message = new Message();
   message.setSend_userid(1);//标识是系统admin发的站内信
   message.setReceive_user(listCount.get(i).getUser_id());
   User user = userService.getUserById(listCount.get(i).getUser_id());
   message.setStatus(0);
   message.setType("");
   message.setAddip("");
   long time = new Date().getTime()/1000;
   String addtimg = String.valueOf(time);
   message.setAddtime(addtimg);
   message.setName("[钱钱贷]钱票到期提醒");
   message.setContent("尊敬的<a href='http://www.qqjrd.com' title='钱钱贷' target='_blank'>[钱钱贷]</a>用户["+user.getUsername()+"],您有[<span style='color:red;fount-size:14px;'>"+listCount.get(i).getContent()+"</span>张钱票]在[<span style='color:red;fount-size:14px;'>三天后</span>]将要过期,请尽快使用。");
   sendInstaTion(message);
  }
 }
 /**
  * 发送站内信的方法
  */
 public void sendInstaTion(Message message){
  message.setSent_user(message.getSend_userid());
  message.setReceive_user(message.getReceive_user());
  message.setStatus(0);
  message.setType(message.getType());
  message.setAddip(message.getAddip());
  message.setAddtime(message.getAddtime());
  message.setName(message.getName());
  message.setContent(message.getContent());
  messageService.addMessage(message);
 }
 /**
  * 修改时间的方法
  */
 public static String showDate(String beginDate,int month,int day){
  //得到当前用户的到期时间的时间戳  new Date().getTime()/1000
  //long beginDate = new Date().getTime()/1000;
  
  //乘以1000转换时间
  String end_time = beginDate+"000";
  String vip_end_time = end_time;
  //设置时间转化格式
  SimpleDateFormat sdfss=new SimpleDateFormat("yyyy-MM-dd"); 
  String sd = sdfss.format(new Date(Long.parseLong(vip_end_time)));
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  Date dd;
  String da="";
  try {
   dd = format.parse(sd);
   Calendar c = Calendar.getInstance();
            c.setTime(dd);
            //1标识的是年  后面增加的
            //c.add(1, 6);
            if (month != 0) {
             c.add(2, month);
   }
            if (day != 0) {
             c.add(c.DATE, day);
   }
            Date temp_date = c.getTime();
            da = format.format(temp_date);
            //System.out.println(da);
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   return da;
 }
 /**
  * 时间戳转换时间
  * @param timestampString
  * @return
  */
 public static String TimeStamp2Date(String timestampString){ 
    Long timestamp = Long.parseLong(timestampString)*1000; 
    String date = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date(timestamp)); 
    return date; 
 }
 /**
  * 获取当前的时间格式
  * 格式例   2015-01-13
  * @return
  */
 public static String GetNowDate(){  
     String temp_str="";  
     Date dt = new Date();  
     //最后的aa表示“上午”或“下午”    HH表示24小时制    如果换成hh表示12小时制  
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
     temp_str=sdf.format(dt);  
     return temp_str;  
 }
 /***
  * 对于到期的钱票实行删除
  * 每天晚上23点执行删除
  * 在钱票添加的时间加半年后与今天的日期比对
  * 如果等于今天的日期那么就说明到期了将到期的钱票删除
  */
 public void deleteExpireQianPiao(){
  logger.debug("定时器计算我的钱票信息每天23点执行");
  //返回所有的用户中奖的钱票信息
  List<AwardLog> list = awardService.awardLog_qianpiao();
  for (int i = 0; i < list.size(); i++) {
   //得到添加的时间
   long addtime = list.get(i).getAddtime();
   //把日期加半年
   String tixingTime = showDate(addtime+"",6,0);
   //得到现在的日期
   String nowTime = GetNowDate();
   //然后比对加了半年的日期和今天的日期是否一样   如果一样就删除了这张钱票
   if (tixingTime == nowTime || tixingTime.equals(nowTime)) {
    //说明有一样的做删除操作
    awardService.deleteAwardLog(list.get(i).getId());
   }
  }
 }
}


2. 关于定时器的xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

 <!--
 <bean id="awardServiceImpl" class="com.wytech.service.impl.AwardServiceImpl">
 </bean>

    <bean id="userCreditService" class="com.wytech.service.impl.UserCreditServiceImpl">
 </bean>
 
 <bean id="userCreditDao" class="com.wytech.dao.jdbc.UserCreditDaoImpl">
 </bean>
  -->
  <!-- 定义timer id可以随便去  class="com.wytech.Timer.Timer"  指向你的类    property 为注入的服务方法-->
 <bean id="timer" class="com.wytech.Timer.Timer">
  <property name="awardService">
   <ref bean="awardService" />
  </property>
  <property name="userCreditService">
   <ref bean="userCreditService" />
  </property>
  <property name="userCreditDao">
   <ref bean="userCreditDao" />
  </property>
  <property name="userService">
   <ref bean="userService" />
  </property>
  <property name="messageService">
   <ref bean="messageService" />
  </property>
 </bean>
 <!-- 配置钱票到期提醒   开始 -->
 <!-- id随便去  class 为固定的   -->
 <bean id="doMyUserQianPiao" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <!-- name固定的  ref 引用的是上面的id  timer -->
        <property name="targetObject" ref="timer"/>
        <!-- name是固定的  value引用的是timer类中的的要执行的方法  (在timer类中制定有这么个类要执行) -->
        <property name="targetMethod" value="doMyUserQianPiao"/>
     </bean>

 <!-- id随便去的   class的引用为固定的 -->
 <bean id="doMyUserQianPiaoTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <!-- name为固定的  ref引用上面的id 标识要配置多长时间执行 -->
        <property name="jobDetail" ref="doMyUserQianPiao" />
        <!-- cron表达式 --><!-- 每天晚上11点执行秒执行一次 -->
        <property name="cronExpression" value="0 0 6 * * ? " />

     </bean>
 <!-- 配置钱票到期提醒   结束 -->
 
 
 <!-- 配置钱票到期删除   开始 -->
 <!-- id随便去  class 为固定的   -->
 <bean id="deleteExpireQianPiao" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <!-- name固定的  ref 引用的是上面的id  timer -->
        <property name="targetObject" ref="timer"/>
        <!-- name是固定的  value引用的是timer类中的的要执行的方法  (在timer类中制定有这么个类要执行) -->
        <property name="targetMethod" value="deleteExpireQianPiao"/>
     </bean>

 <!-- id随便去的   class的引用为固定的 -->
 <bean id="deleteExpireQianPiaoTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <!-- name为固定的  ref引用上面的id 标识要配置多长时间执行 -->
        <property name="jobDetail" ref="deleteExpireQianPiao" />
        <!-- cron表达式 --><!-- 每天晚上11点执行秒执行一次 -->
        <property name="cronExpression" value="0 0 23 * * ? " />

     </bean>
 <!-- 配置钱票到期删除   结束 -->
 
     <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
       <bean id="startTimer" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
         <property name="triggers">
             <list>
                <!-- 钱票到期提醒 -->
                <ref bean="doMyUserQianPiaoTime"/>
                <!-- 钱票到期删除 -->
                <ref bean="deleteExpireQianPiaoTime"/>
             </list>
         </property>
        
     </bean>

</beans>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值