html音视频标签
quartz与spring整合后,还是需要Scheduler实例、JobDetail实例、Trigger实例,只不过是用FactoryBean的方式创建了。
在spring-context-support-xxx.jar包中有对应的FactoryBean类,Scheduler实例对应org.springframework.scheduling.quartz.SchedulerFactoryBean。JobDetail实例对应两个FactoryBean类,org.springframework.scheduling.quartz.JobDetailFactoryBean和org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean。Trigger实例对应两个FactoryBean类,org.springframework.scheduling.quartz.SimpleTriggerFactoryBean和org.springframework.scheduling.quartz.CronTriggerFactoryBean,SimpleTriggerFactoryBean对应生成SimpleTrigger实例,CronTriggerFactoryBean对应生成CronTrigger实例。
用MethodInvokingJobDetailFactoryBean创建的JobDetail实例不能序列化,不适于任务调度信息持久化的情况,所以说如果要持久化任务调度信息的话,只能用JobDetailFactoryBean来创建JobDetail实例。
这几项对应的spring配置文件内容如下:
<bean id="printJobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.kou.quartz.QuartzPrint"/>
<property name="durability" value="false"/>
</bean> <bean id="printCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="printJobDetail"/>
<property name="cronExpression" value="0/5 * * * * ? *"/> <!-- 每5秒触发一次 -->
</bean> <bean id="springBeanJobFactory" class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 指定quartz配置文件-->
<property name="configLocation" value="classpath:quartz.properties"/>
<!--QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动,单位秒 -->
<property name="startupDelay" value="30"/>
<!-- 设置自动启动 -->
<property name="autoStartup" value="true"/>
<property name="triggers">
<list>
<ref bean="printCronTrigger"/>
</list>
</property>
<property name="overwriteExistingJobs" value="true"/>
<!--<property name="dataSource" ref="dataSource"/>-->
<property name="jobFactory" ref="springBeanJobFactory"/>
</bean>
JobDetailFactoryBean的jobClass属性值就是我们自己开发的任务类,需要实现org.quartz.Job接口或者继承QuartzJobBean(全类名是org.springframework.scheduling.quartz.QuartzJobBean,也在spring-context-support-xxx.jar包),我们在execute()或executeInternal()方法中写自己的业务代码即可。
SchedulerFactoryBean的configLocation属性值就是上一篇《quartz入门》中介绍的quartz.properties配置文件,放在classpath下。
SchedulerFactoryBean的overwriteExistingJobs属性默认为false,当trigger由每5秒执行一次变为每30秒执行一次时,任务调度是不会更改的,只有设为true之后才会更改。
如果quartz.properties文件中有配置数据库信息的话(org.quartz.dataSource开头的一些配置),则SchedulerFactoryBean的dataSource属性可以不设置,否则要设置。
以上,定时任务就可以跑起来了。但是如果想在自定义的job中引用spring bean的话,会发现引不进来。还需要进行一些额外的操作:给scheduler设置jobFactory。如果我们不设的话,默认是AdaptableJobFactory实例。AdaptableJobFactory全类名是org.springframework.scheduling.quartz.AdaptableJobFactory。如果想在任务中引用spring的bean,我们可以利用其子类SpringBeanJobFactory,全类名是org.springframework.scheduling.quartz.SpringBeanJobFactory,这个类重写了父类的createJobInstance()方法。
如果不想用spring的配置文件,则也可以把这些配置信息转成代码:
@Configuration
public class Config { private static final Kconf<String> PRINT_JOB_CRON = Kconfs.ofString("young.admin.printJobCron", "0/30 * * * * ? *")
.build(); private static final Kconf<String> MMU_UPDATE_AUDIT_STATUS_JOB_CORN = Kconfs.ofString("young.admin.mmuUpdateAuditStatusJobCron", "0 0 2 * * ? *")
.build(); @Bean("printJobDetail")
public JobDetailFactoryBean getPrintJobDetail() {
JobDetailFactoryBean bean = new JobDetailFactoryBean();
bean.setJobClass(QuartzPrint.class);
bean.setDurability(true);
return bean;
} @Bean("printCronTrigger")
public CronTriggerFactoryBean getPrintCronTrigger(JobDetail printJobDetail) {
CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
bean.setCronExpression(PRINT_JOB_CRON.get());
bean.setJobDetail(printJobDetail);
return bean;
} @Bean("mmuUpdateAuditStatusJobDetail")
public JobDetailFactoryBean getMmuUpdateAuditStatusJobDetail() {
JobDetailFactoryBean bean = new JobDetailFactoryBean();
bean.setJobClass(MmuUpdateAuditStatusJob.class);
bean.setDurability(true);
return bean;
} @Bean("mmuUpdateAuditStatusCronTrigger")
public CronTriggerFactoryBean getMmuUpdateAuditStatusCronTrigger(JobDetail mmuUpdateAuditStatusJobDetail) {
CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
bean.setCronExpression(MMU_UPDATE_AUDIT_STATUS_JOB_CORN.get());
bean.setJobDetail(mmuUpdateAuditStatusJobDetail);
return bean;
} @Bean(name = "scheduler")
public SchedulerFactoryBean getScheduler(Trigger printCronTrigger, Trigger mmuUpdateAuditStatusCronTrigger) {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
// 延时启动,应用启动10秒后
bean.setStartupDelay(10);
bean.setOverwriteExistingJobs(true);
bean.setConfigLocation(new ClassPathResource("quartz.properties"));
bean.setTriggers(printCronTrigger, mmuUpdateAuditStatusCronTrigger);
bean.setJobFactory(new SpringBeanJobFactory());
return bean;
} }
代码中的QuartzPrint、MmuUpdateAuditStatusJob都是集成QuartzJobBean的自定义类。
注意,trigger的cron表达式不要写死,要从配置文件或者从配置中心读取,这样,想更改调度规则的话,就不用改代码了,直接改配置项,然后重启服务器就好了。
html音视频标签的更多相关文章
- HTML5笔记2——HTML5音/视频标签详解
音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...
- HTML5_音视频标签 <audio> 和 <video>
HTML5_音视频标签 <audio> 和 <video> audio 和 video 都是 inline行内元素 如果浏览器支持,则不显示标签文本 IE8 不支持 audio ...
- HTML5音/视频标签详解
一.发展历: 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Qu ...
- HTML5_布局and音视频
HTML5_布局and音视频 I.HTML5标签的改变1.文档声明HTML语法是不区分大小写的HTML5的DTD声明为:<!doctype html>确保浏览器能在HTML5的标准模式下进 ...
- HTML5对音视频的处理
前 言 现在网上有许多的框架和插件,能够满足程序猿的各种需求,慢慢的,就有些忽视最基础的东西. 比如,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. H ...
- 鹅厂优文|打通小程序音视频和webRTC
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯视频云终端技术总监常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ.QQ物联 等产品 ...
- h5-音视频标签
###1. <video>:Html5提供的播放视频的标签 src:资源地址 controls:该属性定义是显示还是隐藏用户控制界面 调用默认控件 ...
- 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
1.概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebR ...
- 腾讯技术分享:微信小程序音视频技术背后的故事
1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...
随机推荐
- EZOJ 网同14(蛋蛋与北大信科-Splay的颜色分离,寻找结点所在子树)
蛋蛋与北大信科 总时限 10s 内存限制 256MB 出题人 lydrainbowcat 提交情况 1/25 背景 琰琰(孩纸们读作:蛋蛋)是妙峰书苑的一名萌萌哒教师,她的夫君(孩纸们称之为:北大信科 ...
- AS3中释放优化的几条常识
as3中垃圾和堆弃物如不及时清理,会造成进程的速度方面授予限制,下面讲几点关于释放优化的几条内容. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉: 父对象内部的子对象被外部其 ...
- Objective-C之run loop详解
Objective-C之run loop详解 做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用API的级别,这是件挺可悲的事情.想学好一门语言还是需要深 ...
- 启用div作为编辑器 添加contentEditalbe属性
1.自从HTML5中新引入了contentEditalbe属性以后,div就与textarea一样,可以作为最常用的编辑器使用. 1.启用div作为编辑器 让div进入编辑状态很简单,只需要: 复制代 ...
- awk-模式匹配
使用awk作为文本处理工具,正则表达式是少不了的. 要掌握这个工具的正则表达式使用.其实,我们不必单独去学习它的正则表达式.正则表达式就像一门程序语言,有自己语法规则已经表示意思. 对于不同工具,其实 ...
- Centos7下建立rubymine快捷方式到侧栏或桌面
gnome桌面的所有菜单项都存储如下位置: /usr/share/applications/ 新建一个菜单项,直接在该目录下新建一个后缀名为.desktop的文件即可. $ vi /usr/share ...
- Chapter 21_5.1 URL编码
URL编码是http所使用的一种编码方式,用于在一个URL中传送各种参数.该编码方式会将特殊字符("=","&","+")编码为&q ...
- 用CSS实现文本框尖角
经常看到这样的尖角,以前不懂,以为都是用图片做出来的,后来惊奇的发现,原来很多都是用CSS做出来的,既美观又节省资源,真是两全其美啊! 那么,用CSS怎么实现这种效果呢?首先,来写一个简单的代码: & ...
- Oracle 收集统计数据
查看最新用户表统计信息 select owner,table_name,last_analyzed from dba_tables where owner not like '%SYS%' order ...
- 关于Android平台的搭建的心得---汪永骏
我本来是.net开发的,但看到目前互联网形式都朝着移动端开发迈进.大势所向,我便也开始学习Android的开发 今天就是要聊一下,我对Android开发的一些心得.今天讲的是,我在搭建Android平 ...