最近用spring集成了quartz做定时任务感觉还不错,比Linux中的crontab靠谱多了,所以记录下来,留个笔记
集群:http://blog.csdn.net/itjavaer/article/details/77948574
在pom.xml引入quartz
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
</dependency>
创建spring-quartz.xml
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://jax-ws.dev.java.net/spring/core
http://jax-ws.dev.java.net/spring/core.xsd">
<bean name="testTask" class="com.orange.task.TestTask"/>
<bean id="testDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 执行的类 -->
<property name="targetObject">
<ref bean="testTask" />
</property>
<!-- 执行的方法 -->
<property name="targetMethod">
<value>execute</value>
</property>
<!--参数 没有可以不写-->
<property name="arguments">
<value>2017-07-01</value>
</property>
<!-- 如果上一个任务没执行完下一个任务不执行 默认为true -->
<property name="concurrent" value="false" />
</bean>
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="testDetail" />
</property>
<!-- 执行规则:10分钟执行一次 第30秒开始执行-->
<property name="cronExpression">
<value>30 */10 * * * ?</value>
</property>
</bean>
<!--调度-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!--触发器列表-->
<ref bean="testTrigger" />
<!--
<ref bean="otherTrigger" />
-->
</list>
</property>
</bean>
</beans>
<import resource="classpath:spring-quartz.xml"/>
package com.orange.task;
import com.orange.service.TestService;
public class TestTask {
@Autowired
private TestService testService;
public void execute(String date){
System.out.println(date);
testService.test(date);
}
}
如果是web项目启动tomcat就行了,我建的不是web项目,使用main方法启动
public class StartTaskMain {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:spring.xml" });
}
}