简单例子可参考
http://yangpanwww.iteye.com/blog/797563
http://liuzidong.iteye.com/blog/1118992
关于时间配置可参考另一篇http://www.cnblogs.com/stit/p/4013398.html
我的项目的应用
1 knowledge-schedule.xml 不要忘了在spring总配置文件中引入
调度工厂没有加lazy-init="false"
<!-- 总管理类如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5"/>
<property name="keepAliveSeconds" value="200"/>
<property name="maxPoolSize" value="50"/>
<property name="queueCapacity" value="60"/>
</bean> <!-- 排行统计start -->
<bean id="methodSchedulerFactory_StatisticsInfoHotReply"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="rankTask" />
<property name="targetMethod" value="startStatistics" />
<property name="arguments" value="info" />
</bean> <bean id="cronTriggerBean_StatisticsInfoHotReply" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="methodSchedulerFactory_StatisticsInfoHotReply" />
<property name="cronExpression" value="* * 2 * * ?" /> <!--每晚2点一次 -->
</bean>
<!-- 排行统计end --> <!-- 栏目定时统计订阅数开始 -->
<bean id="columnJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="columnTimerTasker" />
<property name="targetMethod" value="execute" />
<!--将并发设置为false-->
<property name="concurrent" value="false" />
</bean> <bean id="columnJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="columnJobDetail" />
<!--表达式,每30分钟 执行一次 -->
<property name="cronExpression" value="0 7/30 * * * ?" />
</bean>
<!-- 栏目定时统计订阅数结束 --> <!--调度工厂 -->
<bean id="SpringJobSchedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerBean_StatisticsInfoHotReply" />
<ref bean="columnJobTrigger" />
</list>
</property>
</bean>
</beans>
2 ColumnTimerTasker
package com.ginkgocap.ywxt.knowledge.util; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import javax.annotation.Resource; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import com.ginkgocap.ywxt.knowledge.entity.Column;
import com.ginkgocap.ywxt.knowledge.mapper.ColumnMapper;
import com.ginkgocap.ywxt.knowledge.service.ColumnService;
import com.ginkgocap.ywxt.knowledge.service.ColumnSubscribeService; @Component("columnTimerTasker")
public class ColumnTimerTasker { @Resource
ColumnService cs;
@Resource
ColumnSubscribeService subcs;
@Autowired
ColumnMapper columnMapper; boolean b=true; public void execute() throws JobExecutionException { SimpleDateFormat f=new SimpleDateFormat("E yyyy-MM-dd HH:mm:ss");
Date date=new Date(); System.out.println("ColumnTimerTasker.execute() "+f.format(date)+" "); // if (!b) {
// return;
// } List<Column> list= cs.queryAll(); for (int i = 0; i < list.size(); i++) {
Column c=list.get(i); long count=subcs.countByKC(c.getId()); // if (count>0) {
// System.out.print(c.getId()+"---");
// System.out.println(count);
// } Column cc=new Column();
cc.setId(c.getId());
cc.setSubscribeCount(count); // if (b) {
// columnMapper.updateByPrimaryKeySelective(cc);
// }else {
// if (count>0) {
// columnMapper.updateByPrimaryKeySelective(cc);
// }
// } if (b||count>0) {
columnMapper.updateByPrimaryKeySelective(cc);
} } if (b) {
b=false;
}
} }
3另一哥们写的RankTask,用到了线程池
package com.ginkgocap.ywxt.knowledge.util; import java.util.concurrent.Future; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component; /**
* 排行任务
* <p>于2014-9-11 由 创建 </p>
* @author <p>当前负责人 </p>
*
*/
@Component("rankTask")
public class RankTask { @Resource
ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Autowired
RankSchedule schedule; public void startStatistics(String[] obj) {
schedule.setObj(obj);
Future future = threadPoolTaskExecutor.submit(schedule);
// future.get();
}
}
package com.ginkgocap.ywxt.knowledge.util; import java.util.concurrent.Callable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; /**
* 排行计划
* <p>于2014-9-11 由 创建 </p>
* @author <p>当前负责人 </p>
*/
@Component
public class RankSchedule implements Callable<String> { @Autowired
private RankStatistic rs; private String[] obj; public String[] getObj() {
return obj;
} public void setObj(String[] obj) {
this.obj = obj;
} @Override
public String call() throws Exception {
rs.run(obj[0]);
return null;
} }
quartz spring的更多相关文章
-
Quartz —— Spring 环境下的使用
一.在 Spring 环境下 Quartz 的使用超级简单. 二.具体使用 1.添加对应的 spring-quartz 的配置文件. 2.新建要执行定时任务的目标类和目标方法,不需要继承 Job 接口 ...
-
Quartz Spring与Spring Task总结
Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下. 对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...
-
【59】Quartz+Spring框架详解
什么是Quartz Quartz是一个作业调度系统(a job scheduling system),Quartz不但可以集成到其他的软件系统中,而且也可以独立运行的:在本文中"job sc ...
-
分布式任务调度——quartz + spring + 数据库
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻 ...
-
Quartz Spring分布式集群搭建Demo
注:关于单节点的Quartz使用在这里不做详细介绍,直接进阶为分布式集群版的 1.准备工作: 使用环境Spring4.3.5,Quartz2.2.3,持久化框架JDBCTemplate pom文件如下 ...
-
quartz spring 实现动态定时任务
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间.频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quar ...
-
quartz+spring 实现多任务动态定时器问题
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
-
quartz spring 时间配置
关于时间配置, 1前面带0和不带0的区别是??? (开始时间,带0以整点整分整秒开始,不带的以启动时间定时循环??) 比如 0 7/37 * * * ? 表示每个小时的第7分钟开始执行,然后隔三 ...
-
quartz + spring 配置示例
<!-- 配置job定时任务类 --> <bean id="triggerCalculateLecturerProfitJob" class="com. ...
随机推荐
-
mysql 主主互备
双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到 ...
-
LeetCode——Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, ...
-
OC语法2——OC的类,方法,成员变量的创建
类的创建: 与Java不同的是,OC创建一个类需要两个文件(.h和.m文件) 1> xxx.h:声明文件.用于声明成员变量和方法.关键字@interface和@end成对使用. 声明文件只是声明 ...
-
23设计模式(3):Abstract Factory模式
定义:要创建一组相关或依赖对象提供一个接口,而你并不需要指定其具体类别. 类型:创建一个类模型 类图: 抽象工厂模式与工厂方法模式的差别 抽象工厂模式是工厂方法模式的升级版本号,他用来创建一组相关或者 ...
-
Disassembly1:HelloWorld
我这里学习汇编语言的思路就是逆向C++源码. 先从最简单的一个程序入手:
-
JS数组根据属性来实现排序
var data = [{ name: "zhao", age: }, { name: "qian", age: }, { name: "sun&qu ...
-
nodeJS之进程process对象
前面的话 process对象是一个全局对象,在任何地方都能访问到它,通过这个对象提供的属性和方法,使我们可以对当前运行的程序的进程进行访问和控制.本文将详细介绍process对象 概述 process ...
-
Vim内直接使用p粘贴系统剪切板
解决方法 set clipboard=unnamed
-
120. Triangle(Array; DP)
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
-
OI,再见
SDOI2016 因为自己的沙茶犯了低级的沙茶错误而滚粗. day2原可以AK,却因为眼残脑残只拿到90. 由此可见,细节永远不是一个小问题. 想想过去的日子,还真是舍不得. 但过去的终将过去,未来的 ...