精华内容
下载资源
问答
  • 定时任务只执行一次的cron表达式

    万次阅读 2019-06-27 10:48:04
    只执行一次定时任务 红色框里面的为cron表达式,从左往右分别为秒/分/时/日/月/年 具体是那一天执行一次就不用加(?)问号了,没有必要。 cron表达式这样写就可以了,执行一次,然后就不会再执行了。 ...

    只执行一次的定时任务

    在这里插入图片描述
    红色框里面的为cron表达式,从左往右分别为秒/分/时/日/月/年
    cron表达式这样写就可以了,只会执行一次,然后就不会再执行了。

    展开全文
  • 但是如果有多台主机,假设我们有4台,那么这个定时任务就会执行4,造成积分+4 解决方法 解决方法有很多种:redis + token,redis + 分布式锁,这里我们采用乐观锁 数据库新建一张表: CREATE TABLE `t

    问题

    假如我们有一个定时任务,每天凌晨0点,给当天过生日的人,积分加1

    @Scheduled(cron = "0 0 0 */1 * * *")
    public void updateScore() {
        //doSomething...
    }
    

    单主机部署下不会有任何问题。

    但是如果有多台主机,假设我们有4台,那么这个定时任务就会执行4次,造成积分+4

    解决方法

    解决方法有很多种:redis + token,redis + 分布式锁,这里我们采用乐观锁

    数据库新建一张表:

    CREATE TABLE `t_lock` (
      `lock_key` varchar(15) NOT NULL COMMENT '定时任务Key',
      `utime` bigint(20) NOT NULL COMMENT '用于乐观锁的时间',
      UNIQUE KEY `lockUniq` (`lock_key`,`utime`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    一个项目里可能有多个定时任务,lock_key用来区分定时任务,utime用于更新操作。

    每天凌晨0点,utime传入当天时间(初始值设一个很小的值,保证第一次可以执行),然后执行sql语句:

    update
          `t_lock`
    set
           `utime` = #{utime}
    where
           `lock_key`=#{lock_key} and `utime`<#{utime}
    

    此时4台主机的这个定时任务,只有1台主机执行update成功,并且返回1,其他都返回0,在返回0的时候,直接return结束

    @Scheduled(cron = "0 0 0 */1 * * *")
    public void updateScore() {
    	//tLock对象传入当前时间和key
    	...
    	//获取update影响行数
        int i = tLockMapper.update(tLock);
        if(i == 0) {
            return;
        }
        //doSomething...
    }
    
    展开全文
  • ![![图片说明](https://img-ask.csdn.net/upload/201710/24/1508835663_637595.png)图片说明](https://img-ask.csdn.net/upload/201710/24/1508835251_634761.png)
  • 于是用到了Timer对象来定时发送垃圾消息,可是却遇到了TimerTask只执行一次就不再运行的问题。 class Task extends TimerTask { @Override public void run() { Log.d("com.xxx.xxx.service", ...
    最近在做物联网项目,用到了Socket长连接方面的技术,找了很多这方面资料,都说保持长连接的方法最常见的就是定时发送垃圾消息让客户端与服务端的网络不断开。于是用到了Timer对象来定时发送垃圾消息,可是却遇到了TimerTask只执行一次就不再运行的问题。

    class  Task extends TimerTask {
    
    		@Override
    		public void run() {
    			Log.d("com.xxx.xxx.service", "timertask -------- running!");
    			Packet packet = new Packet();
    			packet.pack("WVM|1\r\n");
    			send(packet);
    		}
    	}

    task运行部分是这样写的:

    timer = new Timer(true);
    		timer.schedule(new Task(), 30000);

    我的本意是让task每隔30000毫秒运行一次,但仔细查看API后发现,这个方法的意思是延时多少毫秒后执行此task。

    schedule(TimerTask task, long delay)的注释:Schedules the specified task for execution after the specified delay。


    后来我更换成:

    timer = new Timer(true);
    		timer.schedule(new Task(), 5000, 30000);
    运行就正常了。

    schedule(TimerTask task, long delay, long period)

    展开全文
  • quartz定时任务实现只执行一次,以后不再执行

    万次阅读 热门讨论 2018-06-13 09:30:34
    那么定时任务也可以实现只执行一次的操作。配置如下&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" ...

    按说只在tomcat启动时执行一次,我们可以用监听器来实现,但是有些开发框架中因特殊场景不适合用监听器。那么定时任务也可以实现只执行一次的操作。配置如下

    好使的话大家给个赞

    <?xml version="1.0" encoding="UTF-8"?>
    <beans 
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
     
        
    
        <bean id="publicWebServiceJob" class="cn.org.site.business.quartz.PublicWebServiceScheduleJob"/>
        <bean id="publicWebServiceJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="publicWebServiceJob" />
            <property name="targetMethod" value="doJob"></property>
            <!--默认允许并发执行,设置为false 防止并发执行 发生死锁问题 -->
            <property name="concurrent" value="false"/>
    
        </bean>
    
    
    
    <!-- quartz一分钟执行一次的实现方式 -->
        <!-- <bean id="publicWebServiceTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="publicWebServiceJobDetail"></property>
            <property name="cronExpression" value="0 */1 * * * ?"></property>
            <property name="description" value="定时"></property>
        </bean>-->
    
    
        <!-- quartz实例化5秒后执行一次job的方式 -->
        <bean id="publicWebServiceTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
            <property name="jobDetail" ref="publicWebServiceJobDetail" />
            <property name="startDelay" value="5000" /> <!-- 启动延迟  单位/毫秒-->
    
            <property name="repeatCount" value="0" />  <!--  重复次数  -->
        </bean>
    
        <!-- 触发器-->
        <bean id="schedulerFactoryBean-em" lazy-init="false"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    
                    <ref bean="publicWebServiceTriggerBean"/>
                </list>
            </property>
        </bean>
    </beans>

    展开全文
  • springboot 定时任务只想执行一次

    千次阅读 2020-07-09 09:38:31
    在程序入口添加个@EnableScheduling注解 @Schedule(initialDelay = 1000, fixedRate = Long.MAX_VALUE) public void test(){ System.out.println(1); }
  • 直接上图: 定时任务一分钟,程序休眠100秒,可见:Spring前一次定时任务执行完,下次任务会执行
  • 对于个部署在多台机器上的应用,程序运行时,如何保证多个机器上的定时任务只有个机器上的任务被执行? 思路:对于每定时任务job都有个唯一id,当发现改job处于运行状态时,其他机器都不会去调度这个job ...
  • @Scheduled定时任务重复执行

    千次阅读 2020-04-15 10:16:25
    java @Scheduled定时任务重复执行两次问题描述解决方法 问题描述 java Maven项目,使用@Scheduled(cron = “0 0/59 * * * ?”) 对定时方法进行了标注,...搜索了网上很多方法,大多都为 “定时任务xml初始化一次,注...
  • 话不多说,直接上代码: import os,time count =0 os.chdir(r'd:\slpworkspace\github\') while count < 10: os.system('cmd')#执行系统命令 time.sleep(100)#推迟执行、休眠 count +=1
  • 首先是创建一个Windows定时...关于创建Windows定时任务执行python脚本,上面两篇博客的作者已经写得非常清楚了,但是我的需求是让该定时任务每隔5分钟执行一次,于是我在上面两篇博客的基础上进行了如下设置: 1、首...
  • 定时任务执行的问题

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

    千次阅读 2020-09-14 13:42:07
    每小时执行一次为 0 */1 * * * 这种写法。 注意的是,很容易粗心写成 * */1 * * * 这种写法,代表每隔一小时每一分钟都执行一次 其他例子: crontab每分钟定时执行: */1 * * * * service mysqld restart //每隔...
  • 思路:让定时任务执行时,随机睡几秒钟,首先执行的服务器更新job开关,执行完毕后关闭开关 注意:个人设计思路,仅供参考哈 、代码 private static String serverIp = null; static { //获取服务器...
  • Spring Task定时任务每天零点执行一次

    万次阅读 2018-04-24 16:43:38
    这样以来就需要写定时任务,每天去置零一所有用户的发送短信统计数量。首先,在application.xml文件中添加&lt;task:annotation-driven /&gt; 接着就是编写自己的业务处理逻辑package com.*.*.service;...
  • 同样的代码,定时任务在在开发环境、测试环境中测试的定时任务只执行一次,而在正式环境执行2次。 各环境不同的是数据库的连接,以及正式环境的域名配置。 因为所开发项目图片等一些目录路径问题,所以在生产...
  • 这种就叫做定时任务。而在日常的使用中遇到一些需要执行的事情或任务,我们也可以通过命令来告诉电脑在特定时间把一些特定的工作给做一下。     以上的这些情景在Linux中,我们可以通过crontab和at这两个工具来...
  • 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务 ...
  • springboot定时任务@Scheduled执行

    千次阅读 2019-08-30 11:08:15
    在spring boot开发定时任务时遇到个很怪异的现象..我进行调试模式,在没有bug的情况下.执行了三 才停止..如图: 原因是因为执行时间太短,在CronSequenceGenerator.class的next方法。 public Date next(Date ...
  • crontab定时任务执行的原因

    万次阅读 多人点赞 2017-01-16 18:35:20
    我在网上找的时候发现网上主要...如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 service crond start 如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装: yum...
  • 现在有个项目需求,需要定时任务,在项目启动的时候就执行一次 需要加个如下红色注释即可 @PostConstruct @Scheduled(cron = "0 30 7 * * ?")
  • 定时任务执行完不执行个任务,完成后继续执行下个定时任务 private boolean isRunning = false; public void startTask() { if (isRunning) { return; } try { isRunning = true; run()...
  • @Scheduled Spring定时任务每次执行解决方案

    万次阅读 热门讨论 2017-08-17 14:57:41
    执行定时任务的时候我遇到了种情况,个定时器每次会被执行,这就让人有点困惑,猜测肯定是哪里配置出了问题(配了两个当前上下文情况),看了一下网上很多解释,没有找到与自己相匹配的情况,所以自己也...
  • 步package com.eh.util;import java.util.Calendar; import java.util.Date;... * java定时任务,每天定时执行任务 * @author wls * */ public class TimerManager { //时间间隔 private static
  • SpringMVC框架使用Scheduled注解 定时任务执行任务解决思路
  • springmvc定时任务重复执行2的解决

    千次阅读 2018-05-27 23:07:49
    也许是老生常谈的问题了。 我在网上找了好多,虽然讲的是定时任务的那个类被实例化了两,要注意配置分离。于是我有了下面的操作: ...但是任然重复执行次定时任务。最后的解决方案是在web.xml中分开加载...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 165,272
精华内容 66,108
关键字:

定时任务只执行一次