java技巧------在spring中使用配置使用定时任务

前言

    在项目中,经常会使用到定时任务来完成某个功能,在这里做个记录.

正文

    spring中的定时任务使用很简单,只需要创建一个对应的类,在类中的execute方法中写好对应的逻辑,并且在spring的配置文件中配置好即可,具体代码实例如下:

public class CloseOverPayJDTask {

    protected static final Logger logger = Logger.getLogger(CloseOverPayTask.class);

    @Resource
    private XUCache<String>          cacheService;

    @Resource
    private OrdersServiceHandler         ordersServiceHandler;

    private static final String cacheLockKey = "cloudplus_close_over_pay_jd_task";
    /**
     * 第小时处理一次
     */
    public void execute() {
        //再修改时间
        boolean addResult = false;
        try {
            // 加锁: 放入一个锁,表示当前任务正在运行,防止另一台机器运行
            addResult = cacheService.add(cacheLockKey, "true", 60 * 2);
            if (!addResult) {
                logger.info("[查询支付与退款结果任务]另一台机器正在执行任务,本次暂不执行");
                return;
            }
        }
        catch (Exception e) {
            logger.error("[查询支付与退款结果任务]任务锁缓存异常:", e);
            return;
        }

        logger.info("[查询支付与退款结果任务]开始执行!");
        try {
            ordersServiceHandler.closeOverPayJD();;
        } catch (Exception e) {
            logger.error("[查询支付与退款结果任务]出错!",e);
            e.printStackTrace();
        }
        logger.info("[查询支付与退款结果任务]结束执行!");
    }
}

注意,还需要在spring的配置文件中配置这个任务类

    <task:scheduled-tasks>
        <task:scheduled ref="closeOverPayJDTask" method="execute" cron="${task.close.over.pay.jd.crontab}" />
    </task:scheduled-tasks>

在这里使用cron表达式来定义定时任务执行的频率,这个数据可以写在配置文件中,方便后期随时改变.

总结

    实现定时任务的方式有很多,在这个代码中还加入了缓存,包装集群环境下,每次只有一台服务器来执行.

猜你喜欢

转载自blog.csdn.net/xiaoyao2246/article/details/82702856