精华内容
下载资源
问答
  • 使用Python的timer来完成每天执行一次定时任务,环境是windows,python3.4
  • Spring Task定时任务每天零点执行一次

    万次阅读 2018-04-24 16:43:38
    这样以来就需要写定时任务每天去置零一所有用户的发送短信统计数量。首先,在application.xml文件中添加<task:annotation-driven /> 接着就是编写自己的业务处理逻辑package com.*.*.service;...

    最近根据项目的需求,需要限制用户每天的发送短信数量。这样以来就需要写一个定时任务,每天去置零一次所有用户的发送短信统计数量。

    首先,在application.xml文件中添加

    <task:annotation-driven /> 

    接着就是编写自己的业务处理逻辑

    package com.*.*.service;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    import com.***.common.util.DateUtil;
    import com.***.dao.StudentMessageDao;
    
    @Component
    public class TimerTask {
    
    
    	@Autowired
    	private StudentMessageDao messageDao;
    	
    	/**
    	 * 每天凌晨执行一次
    	 */
    	@Scheduled(cron = "0 0 0 * * ?")
    	public void scheduledTask(){
    		String stringNow = DateUtil.stringNow();
    		int num = messageDao.resetMessageDayCount();
    		if (num<=0) {
    			日志信息
    		}else{
    			日志信息
    		}
    	}
    }

    使用Spring自带的Task,.xml中的一行配置,业务代码的注解使用,就是这么的快捷方便!


    展开全文
  • 步package com.eh.util;import java.util.Calendar; import java.util.Date;... * java定时任务每天定时执行任务 * @author wls * */ public class TimerManager { //时间间隔 private static

    第一步

    package com.eh.util;
    
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Timer;
    
    /**
     * java定时任务,每天定时执行任务
     * @author wls
     *
     */
    public class TimerManager {
        //时间间隔
         private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
         public TimerManager() {
              Calendar calendar = Calendar.getInstance(); 
    
              /*** 定制每日2:00执行方法 ***/
    
              calendar.set(Calendar.HOUR_OF_DAY, 16);
              calendar.set(Calendar.MINUTE, 10);
              calendar.set(Calendar.SECOND, 0);
    
              Date date=calendar.getTime(); //第一次执行定时任务的时间
              System.out.println(date);
              System.out.println("before 方法比较:"+date.before(new Date()));
              //如果第一次执行定时任务的时间 小于 当前的时间
              //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
              if (date.before(new Date())) {
                  date = this.addDay(date, 1);
                  System.out.println(date);
              }
    
              Timer timer = new Timer();
    
              NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
              //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
              timer.schedule(task,date,PERIOD_DAY);
             }
    
             // 增加或减少天数
             public Date addDay(Date date, int num) {
              Calendar startDT = Calendar.getInstance();
              startDT.setTime(date);
              startDT.add(Calendar.DAY_OF_MONTH, num);
              return startDT.getTime();
             }
    }

    第二部

    package com.eh.util;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.TimerTask;
    
    /**
     * 在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后
     *发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
     *发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
     * @author wls
     *
     */
    public class NFDFlightDataTimerTask extends TimerTask {
        private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        @Override
        public void run() {
            try {
                 //在这里写你要执行的内容
                System.out.println("执行当前时间"+formatter.format(Calendar.getInstance().getTime()));
            } catch (Exception e) {
                System.out.println("-------------解析信息发生异常--------------");
            }
        }
    
    }

    第三部

    package com.eh.util;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    
    public class NFDFlightDataTaskListener implements  ServletContextListener {
    
        public void contextInitialized(ServletContextEvent sce) {
             new TimerManager();
        }
    
        public void contextDestroyed(ServletContextEvent sce) {
            // TODO Auto-generated method stub
    
        }
    
    }

    第四步:配置web.xml文件

    <!--NFDFlightDataTaskListener 监听器-->
    <listener>
        <listener-class>com.eh.util.NFDFlightDataTaskListener</listener-class>
    </listener>
    展开全文
  • java定时任务每天定时执行任务,包括这个例子的全部代码。
  • java定时任务每天定时执行任务,每天到这个时间点都会执行
  • 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务 ...

    目录

    一、静态:基于注解

    二、动态:基于接口

    三、多线程定时任务


    序言:

    使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式:

    • 一、基于注解(@Scheduled)
    • 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。
    • 三、基于注解设定多线程定时任务

    一、静态:基于注解

    基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。

    1、创建定时器

    使用SpringBoot基于注解来创建定时任务非常简单,只需几行代码便可完成。 代码如下:

    @Configuration      //1.主要用于标记配置类,兼备Component的效果。
    @EnableScheduling   // 2.开启定时任务
    public class SaticScheduleTask {
        //3.添加定时任务
        @Scheduled(cron = "0/5 * * * * ?")
        //或直接指定时间间隔,例如:5秒
        //@Scheduled(fixedRate=5000)
        private void configureTasks() {
            System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
        }
    }

    Cron表达式参数分别表示:

    (Cron具体意思和用法请看这篇文章:https://blog.csdn.net/u013987258/article/details/106690859

    • 秒(0~59) 例如0/5表示每5秒
    • 分(0~59)
    • 时(0~23)
    • 日(0~31)的某天,需计算
    • 月(0~11)
    • 周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)

    @Scheduled:除了支持灵活的参数表达式cron之外,还支持简单的延时操作,例如 fixedDelay ,fixedRate 填写相应的毫秒数即可。

    2、启动测试

    启动应用,可以看到控制台打印出如下信息:

     显然,使用@Scheduled 注解很方便,但缺点是当我们调整了执行周期的时候,需要重启应用才能生效,这多少有些不方便。为了达到实时生效的效果,可以使用接口来完成定时任务。

    二、动态:基于接口

    基于接口(SchedulingConfigurer)

    1、导入依赖包:

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.0.4.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency><!--添加Web依赖 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency><!--添加MySql依赖 -->
                 <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency><!--添加Mybatis依赖 配置mybatis的一些初始化的东西-->
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>
            <dependency><!-- 添加mybatis依赖 -->
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.5</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>

    2、添加数据库记录:

    开启本地数据库mysql,随便打开查询窗口,然后执行脚本内容,如下:

    DROP DATABASE IF EXISTS `socks`;
    CREATE DATABASE `socks`;
    USE `SOCKS`;
    DROP TABLE IF EXISTS `cron`;
    CREATE TABLE `cron`  (
      `cron_id` varchar(30) NOT NULL PRIMARY KEY,
      `cron` varchar(30) NOT NULL  
    );
    INSERT INTO `cron` VALUES ('1', '0/5 * * * * ?');

    然后在项目中的application.yml 添加数据源:

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/socks
        username: root
        password: 123456

    3、创建定时器

    数据库准备好数据之后,我们编写定时任务,注意这里添加的是TriggerTask,目的是循环读取我们在数据库设置好的执行周期,以及执行相关定时任务的内容。
    具体代码如下:

    @Configuration      //1.主要用于标记配置类,兼备Component的效果。
    @EnableScheduling   // 2.开启定时任务
    public class DynamicScheduleTask implements SchedulingConfigurer {
    
        @Mapper
        public interface CronMapper {
            @Select("select cron from cron limit 1")
            public String getCron();
        }
    
        @Autowired      //注入mapper
        @SuppressWarnings("all")
        CronMapper cronMapper;
    
        /**
         * 执行定时任务.
         */
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    
            taskRegistrar.addTriggerTask(
                    //1.添加任务内容(Runnable)
                    () -> System.out.println("执行动态定时任务: " + LocalDateTime.now().toLocalTime()),
                    //2.设置执行周期(Trigger)
                    triggerContext -> {
                        //2.1 从数据库获取执行周期
                        String cron = cronMapper.getCron();
                        //2.2 合法性校验.
                        if (StringUtils.isEmpty(cron)) {
                            // Omitted Code ..
                        }
                        //2.3 返回执行周期(Date)
                        return new CronTrigger(cron).nextExecutionTime(triggerContext);
                    }
            );
        }
    
    }

    4、启动测试

    启动应用后,查看控制台,打印时间是我们预期的每10秒一次:

    然后打开Navicat ,将执行周期修改为每6秒执行一次,如图:

    查看控制台,发现执行周期已经改变,并且不需要我们重启应用,十分方便。如图:

    注意: 如果在数据库修改时格式出现错误,则定时任务会停止,即使重新修改正确;此时只能重新启动项目才能恢复。

    三、多线程定时任务

    基于注解设定多线程定时任务

    1、创建多线程定时任务

    //@Component注解用于对那些比较中立的类进行注释;
    //相对与在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释
    @Component
    @EnableScheduling   // 1.开启定时任务
    @EnableAsync        // 2.开启多线程
    public class MultithreadScheduleTask {
    
            @Async
            @Scheduled(fixedDelay = 1000)  //间隔1秒
            public void first() throws InterruptedException {
                System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
                System.out.println();
                Thread.sleep(1000 * 10);
            }
    
            @Async
            @Scheduled(fixedDelay = 2000)
            public void second() {
                System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
                System.out.println();
            }
        }

    注: 这里的@Async注解很关键

    2、启动测试

    启动应用后,查看控制台:

    从控制台可以看出,第一个定时任务和第二个定时任务互不影响;

    并且,由于开启了多线程,第一个任务的执行时间也不受其本身执行时间的限制,所以需要注意可能会出现重复操作导致数据异常。

     

    展开全文
  • java定时任务 每天定时执行任务

    千次阅读 2015-04-23 19:38:02
    转载网址:http://www.open-open.com/lib/view/open1338175095183.html ... java定时任务每天定时执行任务。以下是这个例子的全部代码。 ? 1 2

    转载网址:http://www.open-open.com/lib/view/open1338175095183.html

    http://blog.163.com/lxy_rk/blog/static/875638052009872514986/

    java定时任务,每天定时执行任务。以下是这个例子的全部代码。


    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class TimerManager {
     
      //时间间隔
      private static final long PERIOD_DAY =  24 60 60 1000 ;
      
      public TimerManager() {
       Calendar calendar = Calendar.getInstance();
            
       /*** 定制每日2:00执行方法 ***/
     
       calendar.set(Calendar.HOUR_OF_DAY,  2 );
       calendar.set(Calendar.MINUTE,  0 );
       calendar.set(Calendar.SECOND,  0 );
       
       Date date=calendar.getTime();  //第一次执行定时任务的时间
       
       //如果第一次执行定时任务的时间 小于 当前的时间
       //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
       if (date.before( new Date())) {
           date =  this .addDay(date,  1 );
       }
       
       Timer timer =  new Timer();
       
       NFDFlightDataTimerTask task =  new NFDFlightDataTimerTask();
       //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
       timer.schedule(task,date,PERIOD_DAY);
      }
     
      // 增加或减少天数
      public Date addDay(Date date,  int num) {
       Calendar startDT = Calendar.getInstance();
       startDT.setTime(date);
       startDT.add(Calendar.DAY_OF_MONTH, num);
       return startDT.getTime();
      }
      
    }


    在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后
    发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
    发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。


    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class NFDFlightDataTimerTask  extends TimerTask {
     
      private static Logger log = Logger.getLogger(NFDFlightDataTimerTask. class );
     
      @Override
      public void run() {
       try {
        //在这里写你要执行的内容
        
       catch (Exception e) {
        log.info( "-------------解析信息发生异常--------------" );
       }
      }
    }
     
    public class NFDFlightDataTaskListener  implements ServletContextListener {
      
      public void contextInitialized(ServletContextEvent event) {
       new TimerManager();
      }
     
      public void contextDestroyed(ServletContextEvent event) {
      }
     
    }


    然后要在web.xml里面配置监听器

    ?
    1
    2
    3
    4
    5
    < listener >
      < listener-class >
       com.listener.NFDFlightDataTaskListener
      </ listener-class >
    </ listener >
    展开全文
  • JAVA定时执行任务,每天定时几点钟执行任务 转自:https://www.cnblogs.com/longshiyVip/p/4546123.html JAVA定时执行任务,每天定时几点钟执行任务的示例如下: 1.建立TimerManage类,设置时间点,时间点设置的管理...
  • 假如我们有定时任务每天凌晨0点,给当天过生日的人,积分加1 @Scheduled(cron = "0 0 0 */1 * * *") public void updateScore() { //doSomething... } 单主机部署下不会有任何问题。 但是如果有多台主机,...
  • 在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后 ...发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加天。
  • 定时任务不触发立即执行,等待下次Cron触发频率到达时刻开始按照Cron频率依次执行 扩展: scheduleBuilder.withMisfireHandlingInstructionDoNothing(); 不触发立即执行,等待下次Cron触发频率到达时刻开始按照...
  • */1 * * * * sh /***/*****.sh 每分钟执行一次脚本 每天凌晨2点 0 0 2 * * ?和每天隔一小时 0 * */1 * * ? 例1:每隔5秒执行一次:*/5 * * * * ? 例2:每隔5分执行一次:...例3:每天半夜12点30分执行一次:0 30 ...
  • 每小时执行一次 0 0 */1 * * * 每天8-18点每30分钟执行一次 0 0/30 8-18 * * ?
  • 每天凌晨2点 0 0 2 * * ?...例3:每天半夜12点30分执行一次:0 30 0 * * ? (注意日期域为0不是24) 每天凌晨1点执行一次:0 0 1 * * ? 每天上午10:15执行一次: 0 15 10 ? * * 或 0 15 10 * * ? 或 0 15 1.
  • 首先是创建一个Windows定时任务,并且设置它每天执行一次指定的Python脚本 参考以下两篇博客进行: Window系统创建定时任务 定时执行任务 Windows定时任务 执行python脚本文件 *.py 关于创建Windows定时任务执行...
  • mysql定时任务每天定时执行

    千次阅读 2019-11-21 15:56:27
    比较好理解,就是每天执行一次 2)开始执行时间我们可以先看一下 DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) 的值是多少。 首先查询一下当前时间 select now ( ) ; 开始执行时间...
  • @Scheduled定时任务重复执行

    千次阅读 2020-04-15 10:16:25
    java @Scheduled定时任务重复执行两次问题描述解决方法 问题描述 java Maven项目,使用@Scheduled(cron = “0 0/59 * * * ?”) 对定时方法进行了标注,...搜索了网上很多方法,大多都为 “定时任务xml初始化一次,注...
  • JAVA定时执行任务,每天定时几点钟执行任务的示例如下: 1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下: package com.pcitc.time; import java.util.Calendar; import java.util.Date; import ...
  • timerTask实现每天定时段时间内执行定时任务,这个是自己写的代码,有些和我的项目有关,可以删掉,但是其主要的都在里面,我写了注释。
  • windows定时任务执行Python时出错

    千次阅读 2019-06-19 23:21:19
    自己写了个模拟鼠标的Python小程序,想要用windows7下的定时任务每天执行一次,但是程序执行一两步就停了,停止语句是pag.screenshot(‘foo.png’),也就是这个语句没执行。之前的几句执行了希望,想问问大家有...
  • JAVA定时执行任务,每天定时几点钟执行任务的示例如下: 1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下: package com.pcitc.time; import java.util.Calendar; import java.util.Date; import...
  • 定时任务执行的问题

    千次阅读 2019-01-17 10:35:33
    这个问题其实是 tomcat 的配置问题,第一次在webapps中访问以后,tomcat 会扫描 context 下的 docBase 中的路径,所以还会再次执行一次 所以我将appBase中的webapps直接删除,就没有问题了...
  • 很诡异的定时任务每天凌晨执行

    千次阅读 2019-05-15 12:39:33
    这段时间项目上线,涉及到定时任务,遇到件很诡异的事情,每天0点10分会生成报告(原本是每月1号0点5分生成报告) 简单介绍下,项目使用的是springboot,有两个服务 api服务和计算服务,服务之间使用的是异步调用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,964
精华内容 16,385
关键字:

定时任务每天执行一次