spring注解 @Scheduled(cron = "0 0 1 * * *")的使用来实现定时的执行任务

<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触发 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值