quartz

Spring-----定时任务Quartz配置

你。 提交于 2019-12-19 13:00:33
第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。 第一步:定义作业类 1 import org.quartz.JobExecutionContext; 2 import org.quartz.JobExecutionException; 3 import org.springframework.scheduling.quartz.QuartzJobBean; 4 public class Job1 extends QuartzJobBean { 5 6 private int timeout; 7 private static int i = 0; 8 //调度工厂实例化后,经过timeout时间开始执行调度 9 public void setTimeout(int timeout) { 10 this.timeout = timeout; 11 } 12 13 /** 14 * 要调度的具体任务 15 */ 16 @Override 17 protected void executeInternal(JobExecutionContext context) 18 throws JobExecutionException { 19 System.out.println("定时任务执行中…");

springboot定时任务

感情迁移 提交于 2019-12-18 04:07:13
今天用springboot写到一个需求:每周定时发送任务,但是要避开法定节假日。   网上找了些博客看,主要参考了https://www.cnblogs.com/lic309/p/4089633.html,整理补充了一下,完成需求。   (另,如果想要实时动态更新定时任务,可以参考http://blog.csdn.net/liuchuanhong1/article/details/60873295)   为了避开节假日,我写触发器,试了下用quartz的Calendar和HolidayCalendar,代码略复杂。放弃。 import org.quartz.Calendar;import org.quartz.impl.calendar.HolidayCalendar;   后来就弄了个数据库,存放需避开的日期,维护的时候只需更改数据库里的日期即可。(这个按照实际需求来,反复查找数据库,会消耗资源)   类如下。 import lombok.Data; import javax.persistence.Entity; import javax.persistence.Id; /** * Created by 孙义朗 on 2017/11/9 0009. */ @Data @Entity public class Holiday { @Id private String

Quartz定时任务框架实现简单的示例

对着背影说爱祢 提交于 2019-12-17 23:12:35
前言 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。 本小白在做工程有个需求是这样的,提交一个订单,在超过10分钟未支付的情况就去把数据的提交记录删除。所以我们要设置一个定时器在我们的工程当中,比喻隔一段时间就去检索我们的数据库有没有超过十分钟还没支付的订单。 准备工作 编辑器:eclipse, springMVC+spring+Hibernate项目。 这是本小白在做的工程。 实战 先导入 jar包 ,jar包有链接在这里可下载。下载之后导入,然后一定一定检索jar包有无重复,我的发现有3个是重复,原则是留高版本删低版本的。 在业务层新建一个task包,任务包。 新建一个任务接口,并且新建一个任务接口。 源码 package com . bdqn . it . service . task ; public interface MyTask { public void sayHello ( ) ; } 新建一个任务包的实现包并且新建任务实现类实现方法,这个方法打印“Hello”

topshelf和quartz内部分享

三世轮回 提交于 2019-12-17 17:52:16
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。 介绍 topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。 topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。类似的工具有instsrv和srvany。 基础用法 Topshelf使用起来比较简单,通过nuget直接安装即可,目前最新的是3.2版本: 示例代码: HostFactory.Run(x => { x.Service<Manager>(s => { s.ConstructUsing(name => new Manager()); s.WhenStarted(tc => tc.OnStart()); s.WhenStopped(tc => tc.OnStop()); }); x.RunAsLocalSystem(); x.SetDescription(

关于“分布式锁”

爷,独闯天下 提交于 2019-12-16 23:27:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 为什么需要分布式锁 直接作用是保证同一时刻同一代码不被重复执行, 更深一层目的其实是为了保证“功效性”和“正确性”. 功效性(Efficiency) 即节省计算机资源, 减少不必要的重复执行. 如果只是单纯地保证功效性, 一般可以容忍锁出现失误, 因为不会对执行结果造成影响. 准确性(Correctness) 即程序执行结果不会出现错误, 数据不会出现不一致. 这种场景下, 一般不可容忍锁出现失误. 如何实现分布式锁 可以看到网上有很多民众给出了自己的demo, 但仔细研究发现demo离“工业级”还是有一定差距. 如果要使用分布式锁, 我们最好去参考或直接使用一些比较成熟的框架. 分布式环境下, 实现锁机制, 需要基于一个集中式存储, 比如: mysql(或其他数据库)、redis、zookeeper, 简单对比如下: 中间件 原理 特点 参考框架 mysql InnoDB事务引擎的行级锁 性能差 Quartz redis 原子命令setNX 性能高 单点实现简单 集群实现稍复杂 Redisson zookeeper 临时顺序节点 实现复杂 Curator 来源: oschina 链接: https://my.oschina.net/wangxu3655/blog/3143778

quartz入门

≯℡__Kan透↙ 提交于 2019-12-14 15:15:06
public static void main(String[] args) { //配置模式 build模式 //1.实例一个JOB JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class) .withIdentity("myjob", "group") //jobDataMap 在构建JobDetail时,可以将数据放入JobDataMap, .usingJobData("jobSays", "Hello World!") .usingJobData("myFloatValue", 3.14f) .build(); System.out.println("任务名:"+jobDetail.getKey().getName()); System.out.println("任务组:"+jobDetail.getKey().getGroup()); System.out.println("任务类名:"+jobDetail.getJobClass().getName()); //2.0实例一个触发器 Trigger trigger = newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(simpleSchedule()/

Quartz(二)

喜夏-厌秋 提交于 2019-12-13 00:42:46
1 SchedulerFactory 1.1 概述 Quartz是以模块的方式构建的,因为,要使它运行,几个组件必须很好的组合在一起。非常幸运的是,已经有了一些现存的助手可以完成这些工作。 所有Scheduler实例都是由SchedulerFactory创建的。 Quartz的三个核心概念:调度器(Scheduler)、任务(Job)和触发器(Trigger),三者之间的关系是: 一个作业,比较重要的的三个要素就是Scheduler、JobDetail和Trigger。而Trigger对于Job而言就好比是一个驱动器;没有触发器来定时驱动作业,作业就无法运行;对于Job而言,一个Job可以对应多个Trigger,但是对于Trigger而言,一个Trigger只能对应一个Job;所以一个Trigger只能被指派给一个Job;如果你需要更复杂的触发计划,你可以创建多个Trigger并指派它们给同一个Job。 1.2 Scheduler的创建方式 1.2.1 StdSchedulerFactory Quartz默认使用的是StdSchedulerFactory。 使用一组参数(java.util.Properties)来创建和初始化Quartz调度器。 配置参数一般存储在quartz.properties文件中。 调用getScheduler方法就可以创建和初始化调度器对象。

Can you run two different Quartz job instances sequentially?

跟風遠走 提交于 2019-12-12 02:16:07
问题 Hi i have a Job 1 triggered to fire very minute and a job 2 triggered to fire every 5 min. So a at every five minutes the wo jobs will run at the same time, i want to avoid this and force the second job to fire to wait for the other one to finish before starting. I have seen @DisallowConcurrentExecution but that will only avoid parallel running for the two instances of the same jobs and not between different jobs. 回答1: For those interested, what i managed to do is to fusion both jobs in a

Spring Boot 整合 Quartz

旧城冷巷雨未停 提交于 2019-12-11 20:58:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 配置 pom Spring Boot 使用的是2.1.6.RELEASE <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> application.properties 与springboot公用数据源 #使用数据库固化调度信息 spring.quartz.job-store-type=jdbc #调度器名称 spring.quartz.scheduler-name=MyScheduler #不重新创建数据表 spring.quartz.jdbc.initialize-schema=never #线程数量 spring.quartz.properties.org.quartz.threadPool.threadCount = 50 #持久化实现 spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX #数据库方言StdJDBCDelegate spring.quartz.properties

Java : Quartz scheduler - is there a way I can get next five runs of a scheduled job

♀尐吖头ヾ 提交于 2019-12-11 16:28:29
问题 Is there any API which gives the next n runs of a cron expression. 回答1: Quartz jobs are scheduled using a Trigger ( org.quartz.Trigger ). The trigger interface exposes two useful methods: Date getNextFireTime(); Date getFireTimeAfter(Date afterTime); So, take your Trigger, call getNextFireTime() . Now you know when it'll fire next. Then call getFireTimeAfter( next ) and pass it in the next fire time. Repeat until you have enough run times for your use case. So, for five runs, something like