spring的quartz触发器核心为以下几部分:1.调度器( Scheduler) 2.触发器( Trigger) 3.具体内容( JobDetail) 在使用触发器以前 ,需配置xml文件,文件中会指出具体需要触发的类以及类里面的哪个方法,配置如下:
XML中:
-
<!-- 实例化bean -->
-
<bean id= "testMethodQuartz" class ="com.xy.utils.quartz.TestQuartz"/>
-
-
<!-- 配置MethodInvokingJobDetailFactoryBean -->
-
<bean id= "testTaskMethod"
-
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-
<property name="targetObject" ref="testMethodQuartz"/>
-
<property name="targetMethod" value="TestMethod"/>
-
<property name="concurrent" value="false"/>
-
</bean>
-
-
<!-- 配置定时表达式 -->
-
<bean id= "testTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >
-
<property name="jobDetail" ref="testTaskMethod" />
-
<!-- 每一分钟执行一次 -->
-
<property name="cronExpression" value="0 0/1 * * * ?" /> (表达式,用于定义触发时间,秒 分 时 日 月 周 年)
-
</bean>
-
-
<!-- 配置调度工厂 -->
-
<bean id= "testSchedulerFactoryBean"
-
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
-
<property name="triggers" >
-
<list>
-
<ref bean="testTaskTrigger" />
-
</list>
-
</property>
-
</bean>
JAVA中:
-
import org.joda.time.DateTime;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
/**
-
* 测试定时器类
-
* @author javaw
-
*
-
*/
-
public class TestQuartz {
-
-
public static Logger logger = LoggerFactory.getLogger(TestQuartz.class);
-
public void TestMethod(){
-
logger.info("Auto Execute TestMethod start! Date={}" ,new DateTime().toString("YYYY-MM-DD HH:mm:ss" ));
-
logger.info("**********测试跑批类************");
-
logger.info("Auto Execute TestMethod end! Date={}" ,new DateTime().toString("YYYY-MM-DD HH:mm:ss" ));
-
}
-
}
测试类中:
-
public static void main(String[] args) {
-
SchedulerFactoryBean schedulerFactoryBean = (SchedulerFactoryBean) SpringUtilsFromClassPathXml.getBean( "testSchedulerFactoryBean");
-
//启动调度器
-
schedulerFactoryBean.start();
-
}
还有一种方法不用配置xml文件,可以直接调用触发器功能,
首先在配置文件头部的必须要有:
xmlns:task="http://www.springframework.org/schema/task"
其次xsi:schemaLocation必须为其添加:
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
最后只需要在配置文件中加 <task:annotation-driven/>配置即可
在java中 需要使用触发器的类前面加上@Component注解
方法前面加上@Scheduled(cron = "*/5 * * * * ?")注解即可//每隔5秒执行一次