<microrock>

microrock

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、首先需要导入这几个jar包,如下图:

 

其中log4j,quartz,slf4j-api,slf4j-log4j12我是在项目中都引用了

2、引用完jar包后,新建一个作业调度类,执行作业调度逻辑,如下:

package com.net.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.net.entity.record.CountRecord;
import com.net.entity.user.Users;
import com.net.service.CountRecordService;
import com.net.service.UserService;

/**
 * 每日刷新会员分享数额作业
 * 每日刷新会员有效天数
 * @author zhangdi
 *
 */
public class RefreshCountRecord {
    private Logger log = Logger.getLogger(RefreshCountRecord.class);
    @Autowired
    private CountRecordService cRecordService;//权限服务
    @Autowired
    private UserService userService;//用户会员天数更新以及用户会员降级操作
    
    //调用的方法  
    public void execute(){
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        String dateNowStr = sdf.format(d);
        //需要做的事情
        /*
         * *************************************************
         * *************************************************
         * **这里执行会员降级与会员有效天数减一操作**
         * *************************************************
         * *************************************************
         */
        log.info("=========***update userLevel by vipDay START***===============");
        //将vip天数为0的用户的用户等级降为0
        boolean updateUserLeverToNormal = userService.updateUserLevelByVipDays(0, 0);
        log.info(dateNowStr+"=========update userLevel to 0 by vipDay===============>"+updateUserLeverToNormal);
        log.info(dateNowStr+"=========***update userLevel by vipDay END***===============");
        log.info(dateNowStr+"=========***VIP vipDay-1 START***===============");
        List<Users> userLevelOne = userService.findUserByUserLevel(1);
        List<Users> userLevelTwo = userService.findUserByUserLevel(2);
        List<Users> userLevelThree = userService.findUserByUserLevel(3);
        //开始执行vip天数减一
        reduceVipDay(userLevelOne);
        reduceVipDay(userLevelTwo);
        reduceVipDay(userLevelThree);
        log.info(dateNowStr+"=========***VIP vipDay-1 END***===============");
        
        /*
         * *************************************************
         * *************************************************
         * ****这里执行会员记录操作,执行在会员降级之后
         * *************************************************
         * *************************************************
         */
        //设置是否刷新成功
        boolean isRefresh = false;
        //查询出所有会员的限制记录1代表会员0代表非会员
        List<CountRecord> countRecords = cRecordService.findCountRecordsByIsVip(1);
        if(countRecords.size()==0){
            log.info("============="+dateNowStr+"===>not found vip record!!!==========");
            System.out.println(dateNowStr+"发现没有会员记录");
        }else{            
            for (CountRecord c : countRecords) {
                c.setAdverCount(200);
                c.setContactsCount(200);
                c.setShareCount(200);
                c.setIsVip(1);
                isRefresh = cRecordService.updateCountRecordByUserId(c);
            }
            log.info("============="+dateNowStr+"===>refresh vip count to 200=================>"+isRefresh);
            System.out.println(dateNowStr+"刷新会员权限数额为200=================>"+isRefresh);
        }       
    }  
    /**
     * 执行用户vip天数减一
     * @param list
     */
    private void reduceVipDay(List<Users> list){
        int oldVipDays = 0;
        int nowVipDays = 0;
        for (Users users : list) {
            oldVipDays = users.getVipDays();
            nowVipDays = oldVipDays-1;
            boolean isSuccess =userService.updateVipDaysById(users.getId(), nowVipDays);
            log.info("=========update=="+users.getUserName()+"vipDays=======>"+isSuccess);
        }
    }
}

3在applicationContext.xml中配置,如下:

    <!--  使用quartz框架做简单的作业调度(定时器)-->
    <!--要调度的对象-->
    <!-- 刷新数据库中会员每日添加记录的上限 -->  
    <bean id="jobBean" class="com.net.quartz.RefreshCountRecord" />
     <!-- 定义调用对象和调用对象的方法 --> 
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <property name="targetObject" ref="jobBean" />  
        <property name="targetMethod" value="execute" />  
        <!--将并发设置为false-->  
        <property name="concurrent" value="false" />  
    </bean>  
    <!-- 定义触发时间 -->
    <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
            <property name="jobDetail" ref="jobDetail" />  
                    <!--表达式,我的是每天凌晨1点执行一次-->  
                   <property name="cronExpression" value="0 0 1 * * ?" />
                   <!-- <property name="cronExpression" value="0/10 * * * * ?" /> -->
    </bean>
      
    <!--  总管理类如果将lazy-init='false'那么容器启动就会执行调度程序   -->  
    <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >  
            <property name="triggers">  
                <list>  
                    <!--作业调度器,list下可加入其他的调度器-->  
                <ref bean="trigger" />
                </list>  
        </property>  
    </bean>  

至此,一个简单的作业调度就设置完毕。

常用的定时表达式表:

0 0 12 * * ?           每天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点59分(整点开始,每隔5分触发)  
0 0/5 14,18 * * ?        每天下午的 18点到18点59分(整点开始,每隔5分触发)

0 0-5 14 * * ?            每天下午的 2点到2点05分每分触发 
0 10,44 14 ? 3 WED        3月分每周三下午的 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 ? * 6L 2002-2005  从2002年到2005年每月最后一周的星期五的10点15分触发

0 15 10 ? * 6#3           每月的第三周的星期五开始触发 
0 0 12 1/5 * ?            每月的第一个中午开始每隔5天触发一次 
0 11 11 11 11 ?           每年的11月11号 11点11分触发(光棍节)

 

posted on 2017-04-22 20:14  microrock  阅读(1004)  评论(0编辑  收藏  举报