<span style="font-size:14px;">初次接触定时类的小程序,还是走了很多的弯路,如今终于搞定了,总结如下:</span>
<span style="font-size:14px;">import com.activityvip.api.service.SecurityBlockAccountService;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;import org.springframework.scheduling.annotation.Scheduled;/****/
@Service
public class SecurityAccountUtil {private static Logger logger = Logger.getLogger(SecurityAccountUtil.class);private static final List<String> localhost = Arrays.asList("emidas-activityvip-web02.nh", "emidas-activityvip-web01.beta");@AutowiredSecurityBlockService securityBlockService;@AutowiredSecurityBlockAccountService securityBlockAccountService;@AutowiredSecurityBlockAccountDao securityBlockAccountDao;@Scheduled(cron = "0 0 1 * * *")public void run() {if (checkoutHostName()) {try {logger.info("thread is running");DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String lastTime = securityBlockAccountService.getLastTime();Date myDate1 = dateFormat1.parse(lastTime);Date dAfter = getNextDay(myDate1);Integer numByTime = securityBlockService.getAllNumByTime(myDate1, dAfter);Integer accountByTime = securityBlockService.getAllAccountByTime(myDate1, dAfter);securityBlockAccountService.insertAccountNum(numByTime, accountByTime, dAfter);logger.info("thread is end");} catch (Exception e) {logger.info("SecurityAccountUtil:" + e.getMessage());e.printStackTrace();}}}/*** 获取当前时间后一天的时间** @param date* @return*/public static Date getNextDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH, 1);date = calendar.getTime();return date;}/*** 过滤主机名** @return*/protected boolean checkoutHostName() {String hostName = null;try {hostName = InetAddress.getLocalHost().getHostName();} catch (UnknownHostException e) {logger.info(e);hostName = "localhost";}return localhost.contains(hostName);}
}</span>
最近实习写了一个小小的定时统计的程序,用的是spring的 @Scheduled注解,该注解依赖下面的jar包
<span style="font-size:14px;"> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.1.1.RELEASE</version></dependency></span>
在使用该注解以前请做好以下准备工作,配置好相应的xm文件。
配置定时注解的步骤:http://blog.csdn.net/sd4000784/article/details/7745947
下面给出cron参数中各个参数的含义:
CRON表达式 含义
"0 0 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:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发