定时任务

Oracle——24定时任务

早过忘川 提交于 2021-01-12 01:50:08
我们有时候会这么一个需求:希望数据库能够定时的帮我们做某一件事。比如说我们希望数据库能够定期的把库里面某一张表、或某些表的数据汇总到另外一张汇总表里面。那么这个时候我们就可以通过使用数据库的定期任务来实现这么一个功能。 下面我们来举一个简单的例子,假如我们有如下两张表, t1 和 t2 。 t1 及其对应的 sequence: create table t1(a1 integer primary key, a2 varchar2(20), a3 varchar2(20), a4 date); create sequence seq_t1 start with 1 increment by 1; t2 及其对应的 sequence : create table t2(a1 integer primary key, a2 varchar2(20), a3 date); create sequence seq_t2 start with 1 increment by 1; 我们需要在每天凌晨两点的时候把表 t1 里面的 a2 和 a4 作为表 t2 里面的 a2 和 a3 插到表 t2 。 Oracle 的定期任务只是定时的执行某一个任务,但具体是什么任务还需要我们自己来指定。所以首先我们得来建立自己的任务,任务通常都是一个存储过程。这里我们建立如下存储过程: create or

crontab -让服务器执行定时任务

这一生的挚爱 提交于 2020-04-18 04:10:50
1、启动服务   一般启动服务用 "/sbin/service crond start"就可以了,如果是root用户就是 "sudo service crond start"。如果是想开机启动那么就是用"chkconfig crond on"即可。 2、查看运行状态   可以通过查看进程" ps -ax | grep cron ",可以通过查看服务状态"service crond status"。 3、查看现有的定时任务   通过命令 "crontab -l"可以查看现有的定时任务。 4、进入编辑状态   运行" crontab -e",进入编辑状态,比如 #get ssl cert 0 0 1 * * /etc/nginx/ssl/getcert.sh >> /etc/nginx/ssl/get.log   然后按"ESC"键,输入"wq"保存并退出即可,跟vim的编辑一样。保存后可以用 "crontab -l"看看是否添加成功。 5、格式说明   可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件,具体的格式是 Minute Hour Day Month Dayofweek command 分钟 小时 天 月 天每星期 命令 比如 5 * * * * ps

使用zookeeper搭建分布式定时任务可执行锁

浪尽此生 提交于 2020-03-19 14:59:49
3 月,跳不动了?>>> 最近接手一个含有定时任务的历史项目,需要部署两个实例,为了减少重复打包的工作,在技术经理的建议下,决定采用zookeeper临时节点存在与否的方式来控制各个实例下定时任务的是否执行,同时也大部分避免了宕机的情况定时任务不会执行的情况。 具体代码实现: import com.loan_manage.service.MasterService; import com.netflix.curator.RetryPolicy; import com.netflix.curator.framework.CuratorFramework; import com.netflix.curator.framework.CuratorFrameworkFactory; import com.netflix.curator.retry.RetryUntilElapsed; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.data.Stat; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory

MySQL 定时任务event

大憨熊 提交于 2020-03-11 16:46:23
由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据,可以使用mysql的存储过程和事件来完成。 下面例子定时清除日志表log中指定天数前的数据 1、创建日志表log CREATE TABLE IF NOT EXISTS `log` ( `log_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录id', `user_id` int(11) DEFAULT NULL COMMENT '用户id', `op` varchar(128) NOT NULL COMMENT '操作类型', `model` varchar(32) DEFAULT NULL COMMENT '操作模块', `activity_time` int(10) NOT NULL DEFAULT '0' COMMENT '操作时间', `data` text COMMENT '数据', PRIMARY KEY (`log_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户日志表' AUTO_INCREMENT=1 ; 2、创建事件e_del_logs CREATE EVENT `e_del_logs` ON SCHEDULE EVERY 1 DAY STARTS '2013-07-30 17:33:43' ON

日志易产品使用系列一:定时任务使用详解

匿名 (未验证) 提交于 2019-12-02 23:57:01
在日志易产品的使用过程中,有些关键功能的使用是用户关注度比较高、使用比较频繁的,如报表、定时任务、仪表盘展示等。今天,我们就详细说下定时任务的使用。 1 定时任务工作逻辑 定时任务由日志易后端模块定时发起,经 SPL 语句搜索出相关结果并保存,并能在任务运行后在前台页面查看历史运行结果。定时任务的优势在于可以定期保存查询结果,以便后期实时查看。 定时任务的执行有以下步骤: 1、输入搜索语句,执行搜索; 2、将搜索结果保存为“定时任务”; 3、将定时任务相关信息记录在对应的数据库中; 4、根据任务相关规则中的搜索语句(query)、运行频次及首次运行时间等配置,后端模块定时执行该任务; 5、按照定时任务规则中的参数 size 规定的限制条数,将任务执行结果入库索引,同时将结果记录,以供前台查看本地定时任务的运行结果。 2 定时任务创建流程 根据上述定时任务的执行步骤,定时任务的创建有以下流程。 2.1 执行搜索,创建“定时任务” 在搜索界面定义搜索语句后并执行,通过“另存为”,打开“定制任务”创建页面。 2.2 定时任务创建 这里需要注意的几点: 1、“日志来源”跟权限有关,默认是 all; 2、不管是搜索语句中手动指定 timerange(搜索时间范围),还是用搜索时选择的 timerange,尽量跟执行计划中的执行间隔时间保持一致,如果执行时间间隔比 timerange

springboot动态添加定时任务

匿名 (未验证) 提交于 2019-12-02 23:34:01
需要的maven依赖 <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter<

ORACLE数据库定时任务—DBMS_JOB

匆匆过客 提交于 2019-11-30 04:48:07
创建 DBMS_JOB 使用以下语句: VARIABLE jobno number; begin DBMS_JOB.SUBMIT( :jobno, --job号,ORACLE自动分配 'your_procedure;', --执行的存储过程或SQL语句,';'不能省略 next_date, --下次执行时间 'interval' --每次间隔时间,以天为单位 ); commit; end; 例子: 作为示范,先创建一张简单的表: CREATE TABLE T_TIME( JOB_TIME DATE not null ); 每分种为 T_TIME 表插入一条数据: VARIABLE jobno number; begin DBMS_JOB.SUBMIT( :jobno, 'insert into T_TIME values (sysdate);', Sysdate, 'sysdate+1/24/60' ); commit; end; 每天删除前一天的数据: VARIABLE jobno number; begin DBMS_JOB.SUBMIT( :jobno, 'delete T_TIME where JOB_TIME < sysdate-1;', Sysdate, 'sysdate+1/24' ); commit; end; 查看所有的 JOB select * from

Spring定时任务的几种实现

孤街醉人 提交于 2019-11-29 23:31:18
Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式,因为这样所以的类都是普通类

spring quartz 执行简单的定时任务

人走茶凉 提交于 2019-11-29 09:53:41
spring 定时执行任务 实现定时任务方式有两种 1、 Spring 的org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean类,需要实现定时任务的方法只是一个普通方法。这个最简单 2是Spring的org.springframework.scheduling.quartz.JobDetailBean的类功能, 继承 Spring封装Quartz的org.springframework.scheduling.quartz.QuartzJobBean类,实现 executeInternal方法,executeInternal方法中调用业务类。 先上我的maven配置 <dependency> <groupId>org .quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.2.2.RELEASE</version> <

处理亿级数据的“定时任务”,如何缩短执行时间?

送分小仙女□ 提交于 2019-11-27 14:41:58
继续答水友提问。 问题抽象 :(1)用户会员系统;(2)用户会有分数流水,每个月要做一次分数统计,对不同分数等级的会员做不同业务处理; 数据假设 : (1)假设 用户 在100w级别; (2)假设 用户日均 1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别, 3个月流水数据量 在亿级别; 常见解决方案 :用一个定时任务,每个月的第一天计算一次。 //(1)查询出所有用户 uids[] = select uid from t_user; //(2)遍历每个用户 foreach $uid in uids[]{ //(3)查询用户3个月内分数流水 scores[]= select score from t_flow where uid=$uid and time=[3个月内]; //(4)遍历分数流水 foreach $score in scores[]{ //(5)计算总分数 sum+= $score; } //(6)根据分数做业务处理 switch(sum) 升级降级,发优惠券,发奖励; } 一个月执行一次的定时任务,会存在什么问题? 计算量很大,处理的数据量很大,耗时很久,按照水友的说法,需要1-2天。 画外音:外层循环100W级别用户;内层循环9kW级别流水;业务处理需要10几次数据库交互。 可不可以多线程并行处理? 可以,每个用户的流水处理不耦合。