<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");
@Autowired
SecurityBlockService securityBlockService;
@Autowired
SecurityBlockAccountService securityBlockAccountService;
@Autowired
SecurityBlockAccountDao 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触发