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分触发(光棍节)