spring他本身自带了定时任务的管理功能,就是spring-task
spring-task本身是轻量级的,实现的功能也简单一点没有spring-quartz强大,但是简单的定时任务的需求都是可以满足的。
实现,
首先需要配置需要的标签库:
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context"
其中主要是带task和context的
<bean name="gjyrkJob" class="com.lzdf.spw.sp.task.GjyrkJob" />
<task:scheduled-tasks>
<task:scheduled ref="gjcrkJob" method="initGjc" cron="0 30 1 * * ?"/>
<task:scheduled ref="gjyrkJob" method="initGjy" cron="0 1 1 * * ?"/>
</task:scheduled-tasks>
<task:annotation-driven/>
<context:component-scan base-package=" com.lzdf.spw.sp.task " />
注入具体执行任务就可以了,其中<task: scheduled ref="执行任务类" method="具体的方法" cron="开始执行时间"/>
public class GjyrkJob {
public void initGjy() {
try {
System.out.println("任务开始>........"+ new Date());
// 业务逻辑代码调用
List<Gjycxmx> jjrks = gjybhlyService.getJjrksj();
int size = jjrks.size();
while(size !=0){
gjybhlyService.bhrk(jjrks);
jjrks = null;
jjrks = gjybhlyService.getJjrksj();
size = jjrks.size();
}
/*if(jjrks.size()<5000){
gjcbhlyService.bhrk(jjrks);
}else{
//拆分数据五千条为一个list
List<List<Gjccxmx>> cfjgs = GjcrkJob.createList(jjrks, 2000);
for(int i=0;i<cfjgs.size();i++){
List<Gjccxmx> temp = cfjgs.get(i);
gjcbhlyService.bhrk(temp);
}
}*/
System.out.println("任务结束!"+ new Date());
} catch (Exception e) {
System.out.println("任务出现异常");
}
}
}
在简单介绍一下spring-quartz,首先quartz需要几个包spring-context-support、quartz。用maven
的话配置为
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
spring的配置
<bean id="methodInvokingJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="gjcrkJob" /> <!-- 具体的类 -->
</property>
<property name="targetMethod">
<value>initGjc</value> <!--具体的方法-->
</property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下
<property name="jobDetail">
<ref bean="methodInvokingJobDetail" />
</property>
每天的8点到21点每隔1分钟触发,具体说明见附录
<property name="cronExpression">
<value>0 * 08-21 * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
添加触发器
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
启动时间的设置
cronExpression的配置说明,具体使用以及参数请百度google
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
- 区间
* 通配符
? 你不想设置那个字段
下面只例出几个式子
CRON表达式 含义
"0 0 12 * * ?" 每天中午十二点触发
"0 15 10 ? * *" 每天早上10:15触发
"0 15 10 * * ?" 每天早上10:15触发
"0 15 10 * * ? *" 每天早上10:15触发
"0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发
分享到:
相关推荐
Spring定时任务的几种实现,欢迎交流!
Spring定时任务调用配置Spring定时任务调用配置Spring定时任务调用配置Spring定时任务调用配置Spring定时任务调用配置
spring定时任务SimpleTrigger 和CronTrigger 配置
spring spring spring spring定时任务所需jar 齐全
使用spring定时任务,使用spring+mybatis 向数据库中插入数据实例
一个tomcat下部署了两个应用,一个是普通web应用syncc,另一个应用syncc_wx属于微信公众号后台程序涉及消息定时推送,tomcat未分离...”spring定时任务执行两次的异常排查处理.docx"针对上述描述问题进行分析和解决。
Spring 定时任务 各参数详细说明,注解方式,简洁
Spring3.x企业应用开发实战 中 Spring 定时任务源码(spring 三种定时任务的实现方式),Spring quartz java 定时器 定时任务 源码
spring 做定时器任务时所依赖的10个jar包,用于实现java定时任务。
实现定时任务的执行操作!
NULL 博文链接:https://bijian1013.iteye.com/blog/2380233
spring 定时任务 示例代码
本文档详细介绍了Spring定时任务配置的两种方式。一种方式是使用Spring提供的 MethodInvokingJobDetailFactoryBean 代理类,Quartz通过该代理类直接调度任务类的某个函数,另外一种方式是任务类继承并实现Quartz接口...
本案例是基于quartz+spring做的定时任务,包含所有jar包,可以直接运行
Spring Quartz定时任务所需要的6个jar包:commons-collections.jar、commons-logging.jar、jta.jar、log4j-1.2.14.jar、quartz-all-1.6.0.jar、spring-2.0.6.jar
可运行的项目,实现了spring定时任务,很好理解!一看就懂