java项目定时任务_java项目定时任务实现

首先配置spring-context.xml文件

在xmlns 下加如下代码

xmlns:task="http://www.springframework.org/schema/task"

在xsi:schemaLocation里添加如下代码

http://www.springframework.org/schema/task

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

还有任务扫描

以上配置完成,新建java类写定时任务

packagecom.test.job;importjava.util.Date;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;importlombok.extern.log4j.Log4j2;/*** 定时任务测试

*@authorljl

**/@Log4j2

@Componentpublic classTestJob {

@Scheduled(cron= "0 */5 * * * ?")public voidtest1() {

log.info("每5分钟执行一次"+ newDate());

}

@Scheduled(cron= "0 0 12 * * ?")private voidtest2() {

log.info("每天中午12点执行"+ newDate());

}

}

以上定时任务完成。

思考:如果多台服务器部署同一个项目,就会出现一个定时任务多次执行的问题,如何解决?

网上找了以下四种方法,可以作为参考。

1、设置执行定时任务的机器名,在代码中判断,只让某一台机器执行。

2、如果有可能,将定时任务独立出来,成为一个单独的项目工程,单一部署。

3、将任务的定时触发模块、任务的执行模块分离。任务的定时触发模块每台机器都允许触发任务,但是任务的执行模块,只要收到一个执行任务,那么下一个执行任务就被忽略掉。任务开始执行设置running = true,任务执行完毕设置running = false,当running

为ture时候,下一个任务不允许执行。需要注意的是,一定要在finally中加上running = false,要不然任务异常的话,下一次任务永远不会再执行了。

4、在数据库建一个表:timerT,表里面有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。当两台服务器,都运行起来后,服务器A开始执行定时器,这时,A会去读取表timerT的status字段,当为0时,则执行定时器的业务逻辑,此时A定时器,需要把status改为1,以便让另一台服务器的定时器B不去执行业务逻辑并把当前服务器的IP记录到表中,同时修改启动一个新的线程,在XXX长的时间间隔内不断去修改timestamp的值,当A执行完业务逻辑时,就把status的值改为0,这样B定时器就可以执行。这样做可以解决一个问题,就是:当其中一个定时器A挂掉后,我们另一个定时器B,可以比对timestap的值与当前时间是否超过XXX时长,如果超过,则证明定时器A已经挂掉,这时B就会把status的值改成1,把serverIP改成B定时器所在的服务器IP,并执行业务逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

enter power save mode解决

这个问题是什么产生的呢?这是我刚来公司的第三天,公司停电,等重新来电的时候有三台电脑都出现了这个问题。连接显示屏没有反应 遇到这种问题,首先这是主机没有正常启动引起的 1第一步:先插拔下电源,重新启动…

python多线程编程_Python 多线程编程

Thread类classThread:def __init__(self,groupNone,targetNone,nameNone,args(),kwargsNone,*,daemonNone)group:None,为日后扩展 ThreadGroup 类实现而保留。target&…

linux修改网卡名(亲测有效)

1查看网卡ip addr 2cd /etc/sysconfig/network-scripts Ls查看 3mv ifcfg-eno16777736 ifcfg-eth0重命名,然后编辑 最后一行加入IPADDR192.168.30.136 NETMASK255.255.255.0 HWADDR00:0C:29:aa?2f BOOTPROTO改成static 4 vi /etc/default/grub 5 grub2-mkconfig…

java 存储空间_Java中的存储空间类型

在Thinking in java里,列举了Java的六种存储类型1.寄存器编写过汇编程序的应该对寄存器非常熟悉,那时候用的ax,bx,cx,dx等等。寄存器在CPU里面,所以速度特别快,但是数量非常有限。在java中无法直…

读取html文件,让其中的内容和notepad打开这个html的样子一样。

然后我写了个python代码,让其读取这个html文件后,内容和这个一样: htmlfopen(13144815898.html,r,encoding"utf-8") htmlconthtmlf.read() print((htmlcont)) 转载于:https://www.cnblogs.com/www-caiyin-com/p/9447285.html

python默认参数举例_Python中的默认参数实例分析

本文研究的主要是Python中的默认参数的相关内容,具体如下。熟悉C语言的可以知道,C语言中的默认参数是写在函数声明中的,为语法糖,与函数的调用无关,是在函数调用的时候由编译器补齐参数然后进行调用。而Python中的默认…

centos安装ipconfig和telnet命令

1我安装的是mini版的 2首先ipconfig查看不到命令 yum -y install net-tools 解决 3在同事的要求下要安装telnet 首先 rpm -qa telnet-server yum -y install telnet-server rpm -qa telnet yum -y install telnet rpa -qa xinetd yum -y install xinetd 测试 netstat -tnl …

java 对象访问权限_Java面向对象编程之访问控制权限

5. 访问控制权限5.1 类型(4个)privatepublicprotected默认权限5.2 作用private : 私有的,只能类内部访问public : 可以在任何位置访问,类内部访问,对象访问protected: 被本类,和本类的子类访问默认权限:可以…

38. 统计一个整数的二进制表示中bit为1的个数

参考: https://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 转载于:https://www.cnblogs.com/GrimMjxCl/p/9452667.html

python3.7怎么使用arcpy_从Python到空间分析Arcpy|1.3.7 神啊!救救我之如何处理报错...

今天讲的是关键时候不卡壳的技能,尤其是循环语句中和数据清洗中,先假设一种情况,领导安排你把,某机构给你们的坐标x和y数据列表中的每个元素的x偏移3个单位,假设你现在已经可以掌握相关的内容了,心里想太ea…

dockerfile使用(一)

1mkdir dl Cd dl Touch Dockerfile 2修改配置vi Dockerfile FROM alpine:latest MAINTAINER xbf CMD echo ‘hello docker’ 3 docker build -t hello_docker . 4 docker images 5 docker run hello_docker

java程序设计实验报告册_20145215《Java程序设计》实验一实验报告

实验一 Java开发环境的熟悉实验内容及步骤使用JDK编译、运行简单的Java程序命令行下程序开发:在命令行下建立实验目录,进入该目录后创建exp1目录敲入以下代码:package exp1;import java.util.Scanner;public class Hello{public static void …

异步汇合

//多个异步请求完成后汇总结结果(任务执行不区分先后顺序) dispatch_queue_t queue dispatch_get_global_queue(0,0); dispatch_group_t group dispatch_group_create(); dispatch_group_async(group, queue, ^{/*任务a */ }); dispatch_group_async(g…

dockfile应用(二)

1创建目录dl2 Cd dl2 Touch dockerfile Touch index,html 2ROM ubuntu MAINTAINER xbf RUN sed -i ‘s/archive.ubuntu.com/mirrors.ustc.edu.cn/g’ /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx COPY index.html /var/www/html ENTRYPOINT [&quo…

python实验九答案_Python实验九

安徽工程大学python程序设计实验报告班级:物流191 姓名:王悦 学号:3190505103 日期:2020.6.16 指导老师:修宇【实验名称】实验九python包管理【实验目的】进一步了解python的计算生态,…

java gb13000_浅谈 GB13000

引言我前几天写了一篇随笔“随机生成常用汉字(再次改进版)”。园友“菜菜灰”评论说“看着太累,不认识的字还是多,代码也很多,几段代码显示2万多汉字”,并给出了相应的 C# 代码:1 System.Text.StringBuilder sb newSy…

元素的移动

我的想法: 1.首先给移动的元素一个绝对定位,position: absolute, 通过top和left来实现元素的移动。 2. 基本过程:(1)当鼠标的左键按下去时,给元素添加onmousemove, onmouseleave(鼠标不在元素上时, 移除onmousemove事件…

python打开csv文件、计算总成绩_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等)导出GPA 和等级代码是这样,但是报错了,在score float(sc)这行就报错了,下面有没有错误还不知道,大佬能帮看…

json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换

一.Json对象与Json字符串的转化1.jQuery插件支持的转换方式:$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9&#xff…

Fiddler 学习笔记---命令、断点

输入命令框&#xff1a; 1 输入 &#xff1f;51testing 高亮显示对应记录 2 >10 选择body大于10的记录 3 <10 选择body<10的记录 4 200 选择result200的记录行 5 www.51testing.com 选择host包含www.51testing.com的记录 6 select image 选择 content-type 包含image…