quartz

杂谈篇之我是怎么读源码的,授之以渔

≯℡__Kan透↙ 提交于 2019-11-29 23:34:38
读源码的经历 刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该不需要改;另外即使我改了源码,怎么样让我的改动生效了? 项目中引用的不还是没改的jar包吗。回想起来觉得那时候的想法确实挺...... 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。 工作了一年多之后准备跳槽了,开始了一轮的面试,其中有几个面试官就问到了相关的源码问题:ArrayList、HashMap的底层实现,spring、mybatis的相关源码。问源码的面试一般就是回去等消息,然后就没然后了。那时候开始意识到,源码这东西在之前的工作的中感受不到,但是在面试中好像面的还挺频繁的,从此有意识的开始了jdk部分源码的阅读(主要是集合)。一开始看源码,看的特别糙,知道个大概,知道ArrayList的底层实现是数组,HashMap的底层是散列表(数组+链表);更深入一点的扩容、hash碰撞等等就不知道了。 读spring源码起于工作中遇到了一个问题(spring jdbcTemplate事务,各种诡异,包你醍醐灌顶!),排查一段时间最终是解决了,但过程让我非常难受,各种上网查资料

quartz定时任务 -- Job无法自动注入service @Autowired 注入为null

蓝咒 提交于 2019-11-29 23:34:26
Quartz定时任务 踩到的坑 无法注入service 或 @Autowired 注入为null 在springboot集成quartz时,在quartzJob注入redisService时,一直报null 开始一直以为是spring哪里配置不对,经过“小度度”才知道是quartz 的配置原因 需要调整的地方有两个: 1、添加一个类 MyJobFactory import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.scheduling.quartz.SpringBeanJobFactory; public class MyJobFactory extends SpringBeanJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance

关于Spring定时任务(定时器)用法

﹥>﹥吖頭↗ 提交于 2019-11-29 23:34:14
Spring定时任务的几种实现 博客分类: spring框架 quartz spring spring-task 定时任务 注解 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

Quartz框架应用(1)

谁都会走 提交于 2019-11-29 23:34:00
在你使用调度器之前,需要借助一些具体的例子去理解。 你可以使用SchedulerFactory类来达到程序调度的目的。 有一些Quartz框架的用户可能会将factory的实例存储在JNDI中,其他人为了便于举例子就直接使用factory的实例(比如下文的代码片段)。 一旦调度器实例化后,它就能够启动,等待执行和关闭。需要注意的是一旦调度器调用了shutdown方法关闭后,如果不重新实例化,它就不会启动了。触发器在调度器未启动时,或是中止状态时,都不会被触发。 接下来浏览下面的代码片段,它实例化和启动了一个调度器,并且调度执行了一个Job对象。 JobDetail jobDetail = JobBuilder// .newJob(HelloJob.class)// .withIdentity("testJob_1", "group_1")// .build(); Trigger trigger = TriggerBuilder// .newTrigger()// .withIdentity("trigger_1", "group_1")// .startNow()// .withSchedule(// SimpleScheduleBuilder.simpleSchedule()// .withIntervalInSeconds(1) // 时间间隔 .withRepeatCount

Quartz的原理

僤鯓⒐⒋嵵緔 提交于 2019-11-29 23:32:42
Quartz API : http://www.quartz-scheduler.org/api/2.2.0/ http://www.boyunjian.com/javadoc/org.apache.servicemix.bundles/org.apache.servicemix.bundles.quartz/2.2.1_1/_/ 主要包含了以下接口: Scheduler – 调度器,任务调度的主 API。 Job – 由调度器调度的任务需要实现的接口。 JobDetail – 用于定义任务的实例。 Trigger – 用于定义需要执行的任务和任务的执行时间。 JobBuilder – 用于定义/创建 JobDetail 实例。 TriggerBuilder – 用于定义/创建 Trigger 对象。 quartz调度原理: 1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。 2、JobDetail是一个可执行的工作,它本身可能是有状态的。 3、Trigger代表一个调度参数的配置,什么时候去调。 4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿)

基于Netty+Zookeeper+Quartz调度分析

余生长醉 提交于 2019-11-29 23:32:21
系列文章 Spring整合Quartz分布式调度 Quartz数据库表分析 Quartz调度源码分析 基于Netty+Zookeeper+Quartz调度分析 前言 前几篇文章分别从使用和源码层面对Quartz做了简单的分析,在分析的过程中也发现了Quartz不足的地方;比如底层调度依赖数据库的悲观锁,谁先抢到谁调度,这样会导致节点负载不均衡;还有调度和执行耦合在一起,导致调度器会受到业务的影响;下面看看如何来解决这几个问题; 思路 调度器和执行器拆成不同的进程,调度器还是依赖Quartz本身的调度方式,但是调度的并不是具体业务的QuartzJobBean,而是统一的一个RemoteQuartzJobBean,在此Bean中通过Netty远程调用执行器去执行具体业务Bean;具体的执行器在启动时注册到Zookeeper中,调度器可以在Zookeeper获取执行器信息,并通过相关的负载算法指定具体的执行器去执行,以下看简单的实现; 执行器 1.执行器配置文件 executor_name=firstExecutor service_address=127.0.0.1:8000 registry_address=127.0.0.1:2181 配置了执行器的名称,执行器启动的ip和端口以及Zookeeper的地址信息; 2.执行器服务 <bean id="executorServer"

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类,不需要继承自任何基类。 注:个人推荐使用第二种方式,因为这样所以的类都是普通类

Linux后台运行java的jar包

拟墨画扇 提交于 2019-11-29 19:34:40
前言 需要执行的jar为:sysrd-test.jar,并已经上传到了Linux服务器上! 直接运行方式 java -jar sysrd-test.jar 通过这种方式部署的时候,SecureCRT的shell是被锁定的,我们无法再执行其他的操作,如下: [root@48 opt]# java -jar sysrd-test.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.4.RELEASE) 2017-05-25 14:13:27.909 INFO 29120 --- [ main] c.t.srd.tcldp.SrdTcldpApplication : Starting SrdTcldpApplication v0.0.1-SNAPSHOT on 48.sysrd with PID 29120 (/opt/sysrd-test.jar

How to list all windows from all workspaces in Python on Mac?

可紊 提交于 2019-11-29 14:45:02
The following Python 2 code prints list of all windows in the current workspace: #!/usr/bin/python import Quartz for window in Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListOptionOnScreenOnly, Quartz.kCGNullWindowID): print("%s - %s" % (window['kCGWindowOwnerName'], window.get('kCGWindowName', u'Unknown').encode('ascii','ignore'))) Although it doesn't print the applications which are in full screen (as it's in another workspace). How do I modify above script to list all windows from all desktops? The following script should return window information on any desktop/workspace/display,

Spring中Quartz调度器的使用

爷,独闯天下 提交于 2019-11-29 10:15:06
一、Quartz的特点 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2.作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 注:个人比较推崇第二种,因为这种方式下的作业类仍然是POJO。 按任务调度的触发时机来分,主要有以下两种: 1.每隔指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.SimpleTriggerBean 2.每到指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.CronTriggerBean 注:这两种触发方式均可以跟两种作业继承方式相互组合来使用。 下面简单演示一下在Spring对Quartz的用法。 二、作业类继承org.springframework.scheduling.quartz.QuartzJobBean类,每到指定时间则触发一次 1.编写作业类 package bean.jobDetailBean; import org.quartz.JobExecutionContext; import org.quartz