精华内容
下载资源
问答
  • spring定时任务详解(@Scheduled注解)

    万次阅读 多人点赞 2016-07-07 17:09:36
    在springMVC里使用spring的定时任务非常的简单,如下: (一)在xml里加入task的命名空间 xmlns:task="http://www.springframework.org/schema/task" ...

    在springMVC里使用spring的定时任务非常的简单,如下:

    (一)在xml里加入task的命名空间

    xmlns:task="http://www.springframework.org/schema/task" 
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd

    (二)启用注解驱动的定时任务

    <task:annotation-driven scheduler="myScheduler"/> 
    

    (三)配置定时任务的线程池

    推荐配置线程池,若不配置多任务下会有问题。后面会详细说明单线程的问题。

    <task:scheduler id="myScheduler" pool-size="5"/>

    (四)写我们的定时任务

    @Scheduled注解为定时任务,cron表达式里写执行的时机

    package com.mvc.task.impl;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.concurrent.TimeUnit;
    import org.joda.time.DateTime;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    import com.mvc.task.IATask;
    @Component
    public class ATask implements IATask{
           @Scheduled(cron="0/10 * *  * * ? ")   //每10秒执行一次    
           @Override    
           public void aTask(){    
                try {
                    TimeUnit.SECONDS.sleep(20);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                System.out.println(sdf.format(DateTime.now().toDate())+"*********A任务每10秒执行一次进入测试");    
           }    
    }  
    package com.mvc.task.impl;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import org.joda.time.DateTime;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    import com.mvc.task.IBTask;
    @Component
    public class BTask implements IBTask{
    	   @Scheduled(cron="0/5 * *  * * ? ")   //每5秒执行一次    
    	   @Override 
    	   public void bTask(){   
    		     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    	         System.out.println(sdf.format(DateTime.now().toDate())+"*********B任务每5秒执行一次进入测试");    
    	   }    
    }

    spring的定时任务默认是单线程多个任务执行起来时间会有问题(B任务会因为A任务执行起来需要20S而被延后20S执行),如下图所示:



    当我们配置了线程池后再来看结果(多线程下,B任务再也不会因为A任务执行起来要20S而被延后了):

    cron表达式详解:    

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。

           按顺序依次为
          1  秒(0~59)
          2  分钟(0~59)
          3 小时(0~23)
          4  天(0~31)
          5 月(0~11)
          6  星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
          7.年份(1970-2099)
          其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.
           0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
           0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
           0 0 12 ? * WED 表示每个星期三中午12点
           "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期间的每1分钟触发
           "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
           "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
           "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
           "0 10,44 14 ? 3 WED" 每年三月的星期三的下午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" 每月的第三个星期五上午10:15触发
           有些子表达式能包含一些范围或列表
           例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”
           “*”字符代表所有可能的值
           “/”字符用来指定数值的增量
           例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
                    在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样
           “?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
           当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
           “L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写
           如果在“L”前有具体的内容,它就具有其他的含义了。例如:“6L”表示这个月的倒数第6天
           注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
           W 字符代表着平日(Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。大部分的商业处理都是基于工作周的,所以 W 字符可能是非常重要的。
           例如,日域中的 15W 意味着 "离该月15号的最近一个平日。" 假如15号是星期六,那么 trigger 会在14号(星期五)触发,因为星期四比星期一离15号更近。
           C:代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。
           字段   允许值   允许的特殊字符
           秒           0-59           , - * /
           分           0-59           , - * /
           小时           0-23           , - * /
           日期           1-31           , - * ? / L W C
           月份           1-12 或者 JAN-DEC           , - * /
           星期           1-7 或者 SUN-SAT           , - * ? / L C #
           年(可选)           留空, 1970-2099           , - * /

    展开全文
  • java 定时任务之一 @Scheduled注解(第一种方法)

    万次阅读 多人点赞 2017-12-12 22:09:22
    使用spring @Scheduled注解执行定时任务: 步骤: 1.xmlns 添加: http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd xmlns:task=...

    (本文仅供参考)

    使用spring @Scheduled注解执行定时任务:

     

    步骤:

    1.xmlns 添加

    http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-3.1.xsd
    xmlns:task="http://www.springframework.org/schema/task"

    2.注入:

    <task:annotation-driven/>

    3.注解写在实现类的方法上,实现类上要有组件的注解@Component

    @Scheduled(cron="0/5 * *  * * ? ")   //每5秒执行一次

    运行即可!!!


    关于Cron表达式介绍

    cronExpression定义时间规则,Cron表达式由6或7个空格分隔的时间字段组成:秒 分钟 小时 日期 月份 星期 年(可选)

    字段  允许值  允许的特殊字符 
    秒       0-59     , - * / 
    分       0-59     , - * / 
    小时      0-23     , - * / 
    日期      1-31     , - * ? / L W C 
    月份      1-12     , - * / 
    星期      1-7       , - * ? / L C # 
    年     1970-2099   , - * /

    “*”字符被用来指定所有的值。

    如:

    "*":字符在分钟的字段域里表示“每分钟”。 
    “?”:字符只在日期域和星期域中使用。它被用来指定“非明确的值”。

    当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。 
    月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。

    “-”:字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。

    “,”:字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。

    “/”:字符用于指定增量。

    如:“0/15”在秒域意思是每分钟的0,15,30和45秒。

    “5/15”在分钟域表示每小时的5,20,35和50。

    符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。

    记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:

    秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。字符“/”可以帮助你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只 有当7月的时候才会触发,并不是表示每个6月。

    L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of- month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示 一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。

    字符“W”只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果 是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个 单独的数值使用,不能够是一个数字段,如:1-15W是错误的。

    “L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。

    字符“#”只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。

    字符“C”允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历” 关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历” 中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。

    例子如下:

    0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
    0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
    0 0 12 ? * WED 表示每个星期三中午12点 
    "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期间的每1分钟触发 
    "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
    "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
    "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
    "0 10,44 14 ? 3 WED" 每年三月的星期三的下午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" 每月的第三个星期五上午10:15触发

    关于Cron表达式的介绍来源:

    http://blog.csdn.net/supingemail/article/details/22274279

    表达式网站生成:

    http://cron.qqe2.com/  直接点击

     

     

     

    展开全文
  • 定时任务的任务名称,cron(定时任务表达式),定时任务开关,存储在数据库表中。在不重启项目的情况下,修改定时任务表达式,可以实时获取新的定时任务执行时间规则;修改定时任务执行状态,可以随时开关定时任务。...

    业务场景描述:

    定时任务的任务名称,cron(定时任务表达式),定时任务开关,存储在数据库表中。在不重启项目的情况下,修改定时任务表达式,可以实时获取新的定时任务执行时间规则;修改定时任务执行状态,可以随时开关定时任务。

    使用技术:基于接口  SchedulingConfigurer

    1、建表 管理定时任务

    DROP TABLE IF EXISTS `scheduled`;
    CREATE TABLE `scheduled` (
      `name` varchar(20) DEFAULT NULL,
      `cron` varchar(30) DEFAULT NULL,
      `open` tinyint(1) DEFAULT NULL COMMENT '1开启, 其他为关闭'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of scheduled
    -- ----------------------------
    INSERT INTO `scheduled` VALUES ('demo1', '0/5 * * * * ?', '1');
    INSERT INTO `scheduled` VALUES ('demo2', '0/6 * * * * ?', '1');

    2、代码实现

    定时任务配置类:

    package com.example.demo.scheduled;
    
    import com.google.common.util.concurrent.ThreadFactoryBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar;
    import org.springframework.scheduling.support.CronTrigger;
    import java.util.concurrent.Executor;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ThreadFactory;
    
    /**
     * @Description: 基于接口SchedulingConfigurer的动态定时任务
     * @Author: 
     * @Date: 2020-08-27
     */
    @Configuration
    @EnableScheduling
    public abstract class ConfigurerSchedulingDemo implements SchedulingConfigurer {
    
        //定时任务周期表达式
        private String cron;
        /** 
         * @Description:  重写配置定时任务的方法
         * @param: scheduledTaskRegistrar 
         * @return: void 
         * @Author: 
         * @Date: 2020/8/28
         */
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            scheduledTaskRegistrar.setScheduler(taskScheduler());
            scheduledTaskRegistrar.addTriggerTask(
                    //执行定时任务
                    () ->
                    {
                        taskService();
                    },
                    //设置触发器
                    triggerContext -> {
    
                       cron = getCron();//获取定时任务周期表达式
    
                        CronTrigger trigger = new CronTrigger(cron);
    
                        return trigger.nextExecutionTime(triggerContext);
                    }
            );
    
        }
    
        @Bean
        public Executor taskScheduler() {
            //设置线程名称
            ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
            //创建线程池
            return Executors.newScheduledThreadPool(5, namedThreadFactory);
        }
    
        /**
         * @Description: 执行定时任务
         * @param:
         * @return: void
         * @Author: 
         * @Date: 2020/8/28
         */
        public abstract void taskService();
    
        /**
         * @Description: 获取定时任务周期表达式
         * @param:
         * @return: java.lang.String
         * @Author: 
         * @Date: 2020/8/28
         */
        public abstract String getCron();
    
    }
    

    定时任务1

    package com.example.demo.scheduled;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.example.demo.dao.CronMapper;
    import com.example.demo.entity.Scheduled;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    
    import java.time.LocalDateTime;
    
    /**
     * @Description:
     * @Author: 
     * @Date: 2020-08-27
     */
    @Configuration
    public class TaskDemo extends ConfigurerSchedulingDemo {
    
        @Autowired      //注入mapper
        @SuppressWarnings("all")
        CronMapper cronMapper;
    
        @Override
        public void taskService() {
            Integer open = getOpen();
            if (1== open){
                System.out.println("定时任务demo1:"
                        + LocalDateTime.now()+",线程名称:"+Thread.currentThread().getName()
                        + " 线程id:"+Thread.currentThread().getId());
            }
        }
    
        @Override
        public String getCron() {
            QueryWrapper<Scheduled> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("name","demo1");
            String cron = cronMapper.selectOne(queryWrapper).getCron();
            return cron;
        }
    
        public Integer getOpen() {
            QueryWrapper<Scheduled> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("name", "demo1");
            Integer open = cronMapper.selectOne(queryWrapper).getOpen();
            return open;
        }
    
    }
    

       定时任务2

    package com.example.demo.scheduled;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.example.demo.dao.CronMapper;
    import com.example.demo.entity.Scheduled;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    
    import java.time.LocalDateTime;
    
    /**
     * @Description:
     * @Author: 
     * @Date: 2020-08-27
     */
    @Configuration
    public class TaskDemo1 extends ConfigurerSchedulingDemo {
    
        @Autowired      //注入mapper
        @SuppressWarnings("all")
        CronMapper cronMapper;
    
        @Override
        public void taskService() {
            Integer open = getOpen();
            if (1== open){
                System.out.println("定时任务demo2:"
                        + LocalDateTime.now()+",线程名称:"+Thread.currentThread().getName()
                        + " 线程id:"+Thread.currentThread().getId());
            }
        }
    
        @Override
        public String getCron() {
            QueryWrapper<Scheduled> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("name","demo2");
            String cron = cronMapper.selectOne(queryWrapper).getCron();
            return cron;
        }
    
        public Integer getOpen() {
            QueryWrapper<Scheduled> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("name", "demo2");
            Integer open = cronMapper.selectOne(queryWrapper).getOpen();
            return open;
        }
    }
    

    效果展示:

    启动项目:控制台输出展示

    修改数据库 demo1的执行时间为每15秒一次:

    关闭demo1的定时任务,将demo1的open状态改为0:

    展开全文
  • 基于Springboot执行多个定时任务并且动态获取定时任务信息 基于Springboot执行多个定时任务并且动态获取定时任务信息 简介 说明 SpringApplication-启动类 动态获取定时任务信息 mapper service service impl ...

    基于Springboot执行多个定时任务并且动态获取定时任务信息

    说明

    1. 多计划任务并发问题
    2. 自动刷新问题
    3. 数据库变更后怎么立即生效

    简介

    因为一些业务的需要所有需要使用多个不同的定时任务,并且每个定时任务中的定时信息是通过数据库动态获取的。下面是我写的使用了Springboot+Mybatis写的多任务定时器。
    主要实现了以下功能:

    	1.同时使用多个定时任务
    	2.动态获取定时任务的定时信息
    

    说明

    因为我们需要从数据库动态的获取定时任务的信息,所以我们需要集成 SchedulingConfigurer 然后重写 configureTasks 方法即可,调用不同的定时任务只需要通过service方法调用不用的实现返回对应的定时任务信息。有多少个定时任务就重写多少个该方法(最好创建不同的类)。然后直接在application中启动即可。

    SpringApplication-启动类

    package test;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    
    @SpringBootApplication
    @EnableTransactionManagement
    @EnableScheduling
    @ComponentScan(value = {"test.*"})
    @MapperScan("test.mapper.*")
    public class TomcatlogApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(TomcatlogApplication.class, args);
    	}
    
    }
    

    动态获取定时任务信息

    mapper

    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    
    import java.util.List;
    
    /*
     * @version 1.0 created by liuxuewen on 2018/8/21 14:39
     */
    public interface TomcatlogMapper {
        @Select("SELECT * FROM scheduledtask s WHERE s.`enable` = 1")
        List<ScheduledtaskEntity> queryScheduledTask();
    }
    
    

    service

    package test.service;
    import java.util.ArrayList;
    import java.util.List;
    
    /*
     * @version 1.0 created by liuxuewen on 2018/8/21 14:44
     */
    public interface TomcatlogService {
        List<ScheduledtaskEntity> queryScheduledTask();
    }
    
    

    service impl

    import test.mapper.tomcatlog.TomcatlogMapper;
    import test.service.TomcatlogService;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;
    
    /*
     * @version 1.0 created by liuxuewen on 2018/8/21 14:44
     */
    @Service
    public class TomcatlogServiceImpl implements TomcatlogService {
        private static final Logger LOGGER = LoggerFactory.getLogger(TomcatlogServiceImpl.class);
    
        @Autowired
        TomcatlogMapper tomcatlogMapper;
    
        @Override
        public List<ScheduledtaskEntity> queryScheduledTask() {
            try {
                List<ScheduledtaskEntity> res = tomcatlogMapper.queryScheduledTask();
                return res;
            } catch (Exception e) {
                LOGGER.info(e);
            }
            return null;
        }
    

    定时任务

    import test.service.TomcatlogService ;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar;
    import org.springframework.scheduling.support.CronTrigger;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    
    /*
     * @version 1.0 created by liuxuewen on 2018/8/27 9:25
     */
    @Component
    public class ElasticsearchSchedultaskController implements SchedulingConfigurer {
        private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchSchedultaskController.class);
    
        @Autowired
        private TomcatlogService controllerService;
    
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            try {
                controllerService.queryScheduledTask().forEach((cron)->{
                    scheduledTaskRegistrar.addTriggerTask(
                            //1.添加任务内容(Runnable),可以为方法
                            () -> System.out.println("定时任务1"),
                            //2.设置执行周期(Trigger)
                            triggerContext -> {
                                //2.1 从数据库获取执行周期,在这里调用不同的方法返回不同的定时任务信息
                                System.out.println(cron);
                                //2.2 合法性校验.
                                if (StringUtils.isEmpty(cron)) {
                                    // Omitted Code ..
                                    LOGGER.error("计划任务为空");
                                }
                                //2.3 返回执行周期(Date)
                                return new CronTrigger(cron).nextExecutionTime(triggerContext);
                            }
                    );
                });
                
            }catch (Exception e){
                LOGGER.info(e.toString());
            }
        }
    }
    
    展开全文
  • 程序员福音-定时提醒bat

    万次阅读 2020-05-25 21:58:44
    程序员福音-定时提醒,这篇文章标题想了挺久的 程序员日常:一根烟,一包糖,一台破电脑敲一天 总是有各种事情忙,常常忘记吃饭睡觉打豆豆,简单来说,这个就是个弹窗,利用Windows定时任务功能,实现指定时间提醒...
  • 定时任务框架Quartz-(一)Quartz入门与Demo搭建

    万次阅读 多人点赞 2018-07-10 13:57:07
    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 持久性作业 - 就是保持调度...
  • crontab定时任务不执行的原因

    万次阅读 多人点赞 2017-01-16 18:35:20
    我在网上找的时候发现网上主要...如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 service crond start 如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装: yum...
  • Linux Crontab 查看定时任务启动没

    万次阅读 2018-01-26 16:19:25
    1、先手动执行定时任务以此来判断脚本是否有问题。2、确认服务器是否开启定时任务计划服务命令:service crond statusservice crond start3、查看crontab执行记录如果出现了crontab定时任务不执行的情况,首先需要...
  • PVE 定时关机 定时开机

    千次阅读 2019-09-03 22:59:22
    一、winSCP登录PVE, 二、进入/etc目录 三、修改crontab文件,#前最后一行加入 ...四、保存即可,每天23点55PVE可定时关机,定时开机功能在主板上设置,下次再发教程。 五、参考教程:linux定时关机 ...
  • Linux执行定时任务步骤(crontab)

    万次阅读 2019-12-04 20:50:38
    1.root用户、普通用户均可。 2.查看当前用户所有定时任务:crontab -l ...4.开始编辑,例如添加一个每分钟定时输出hello到test.txt文件的定时任务: 5.* * * * * 分别代表 分 时 日 月 周 ...
  • 1、定时关机 # 注:/s 关机, /t 后面接时间,单位是秒 shutdown /s /t 3600 #一个小时后关机 shutdown -a #取消定时关机 注:"shutdown /h"是立即进入休眠的命令,但/h参数不能与/t连用,故不能用shutdown实现...
  • 使用spring @Scheduled注解执行定时任务、

    万次阅读 多人点赞 2012-07-14 09:31:34
    以前框架使用quartz框架执行定时调度问题、老大说这配置太麻烦、每个调度都需要多加在spring的配置中、能不能减少配置的量从而提高开发效率、最近看了看spring的 scheduled的使用注解的方式进行调度、感觉很方便、...
  • android 定时关机,定时重启

    千次阅读 2019-07-02 09:06:59
    Android定时关机,定时重启。这个需求主要分为两部分1.定时2.关机/重启。定时直接使用系统的定时服务(AlarmManager);关机/重启虽然系统提供了相应的api,但是该api只对系统级的应用开放,普通的应用无法使用。...
  • android 每日定时功能

    千次下载 热门讨论 2013-11-26 11:07:28
    android 每日定时功能,简单闹铃实现,重复闹铃实现。
  • 使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的。我们这次就来说一下定时脚本的那些事,其实网上教程...
  • Activiti 定时任务 定时边界事件

    千次阅读 2019-02-15 15:56:25
    通过定时边界事件可以实现任务超时处理后,发送提醒通知,或者自动将当前流程传递到下一处理人。 首先需要开启 Activiti 的定时任务配置,spring-context-activiti.xml中的 &lt;property name="...
  • 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务 一...
  • windows操作系统定时关机和取消定时关机命令 1、定时关机 shutdown -s -t 60 (60表示定时60秒) 2、取消定时关机 shutdown -a (取消定时关机)...
  • dim 定时_小时 = 12 dim 定时_分钟 = 25 dim tRet = "" dim H = "" dim M = "" dim S = "" Do tRet = Time.Now() H = Time.Hour(tRet) M = Time.Minute(tRet) S = Time.Second(tRet) If H=定时_...
  • 最近项目需要用到定时任务,需要完成一个定时功能。经过了解,项目中目前实现定时任务,一般有三种选择,一是用Java自带的timer类。稍微看了一下,可以实现大部分的指定频率的任务的调度(timer.schedule()),也...
  • Linux定时任务

    万次阅读 2020-09-15 23:43:51
    Linux定时任务 编写脚本 today_date="`date +%Y%m%d`" curl http://127.0.0.1:8000/$today_date/ 编辑定时工作表 crontab -e 编辑内容如下(): 30 0 * * * /home/wj/Script/auto_curl.sh >> /home/wj/...
  • 定时任务的选型及改造

    万次阅读 2018-03-24 23:18:39
    项目中用到了定时任务,项目之初为了快速开发上线,当时直接采用最简单的Linux自带的crontab;项目逐渐维定下来时,针对定时任务自己进行了相关研究,并根据项目实际情况进行了对比以及相关改造。 【比一比&改...
  • Quartz 实现定时定时爬虫

    千次阅读 2016-01-22 15:55:13
    需求最近项目爬虫需要定时爬取内容,查了一些资料,决定使用Quartz。回顾 Timer这篇文字 《Android 仿网易新闻 ViewPager 实现图片自动轮播》 轮播图片也是用的定时,不过使用的 Timer ,代码如下private Timer ...
  • Spring 整合 Quartz 实现动态定时任务(附demo)

    万次阅读 多人点赞 2016-05-01 18:57:24
    最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大。在考虑之后,决定整合更为专业的Quartz来实现定时任务功能。普通定时任务首先,当然是添加依赖...
  • 我们在springboot中使用@Scheduled进行定时任务的执行,如果我们不配置线程池的话,所有的定时任务都使用同一个线程,可能会导致定时任务的延迟或者定时任务的断开,所以我们需要配置线程池来进行这些不必要的问题。...
  • 定时

    千次阅读 2017-01-02 14:54:45
    1,定时图采用一种带数字刻度的时间轴来精确地描述消息的顺序,而不是像顺序图那样只是指定消息的相对顺序,而且它还允许可视化地表示每条生命线的状态变化,当需要对实时事件进行建模时,定时图可以很好地满足要求...
  • crontab定时任务

    万次阅读 2019-08-23 09:42:47
    apt-get install cron #安装Crontab ...crontab -e #编辑定时任务 crontab -r #移除定时任务 crontab -l #查看定时任务 判断crond 是否在运行:pgrep crond或者pgrep cron,如果有在运行则返回进程号。 * * * * * /...
  • Go 语言定时任务

    万次阅读 2020-03-24 22:34:14
    2 定时任务HelloWorld package main import ( "fmt" "github.com/robfig/cron/v3" "time" ) func main() { // 新建一个定时任务对象 // 根据cron表达式进行时间调度,cron可以精确到秒,大部分表达...
  • SpringBoot定时任务实现

    万次阅读 多人点赞 2019-03-20 16:16:32
    最近项目中新增的需求是一系列的定时任务,设置一个结束时间,到规定的endTime之后自动结束,所以就需要我在项目中设定定时任务,在规定时间获取到到期的任务并将它们的状态设定为结束. 定时任务 在SpringBoot中,定时...
  • 定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 179,800
精华内容 71,920
关键字:

定时