注:个人推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。
注:并非每种任务都可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。
Maven依赖
<dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-coreartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-jdbcartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-ormartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-contextartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-context-supportartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-beansartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-jmsartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-txartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-aopartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>${springframework.version}version> dependency> <dependency> <groupId>log4jgroupId> <artifactId>log4jartifactId> <version>1.2.16version> dependency> <dependency> <groupId>org.slf4jgroupId> <artifactId>slf4j-apiartifactId> <version>1.6.1version> dependency> <dependency> <groupId>org.slf4jgroupId> <artifactId>slf4j-log4j12artifactId> <version>1.6.1version> dependency> <dependency> <groupId>commons-logginggroupId> <artifactId>commons-loggingartifactId> <version>1.2version> dependency> <dependency> <dependency> <groupId>org.quartz-schedulergroupId> <artifactId>quartzartifactId> <version>2.2.1version> dependency> <dependency> <groupId>org.quartz-schedulergroupId> <artifactId>quartz-jobsartifactId> <version>2.2.1version> dependency>
public class MyTask extends QuartzJobBean {
private Logger logger = LoggerFactory.getLogger(MyTask.class);
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
logger.info("++++++++++++++++++++++");
logger.info("executeInternal");
logger.info("++++++++++++++++++++++");
}
}
<bean name="myTask" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.yefan.task.quartz.MyTask"/>
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="0"/>
map>
property>
bean>
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次
id="testTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="testJob">property>
<property name="startDelay" value="3000">property>
<property name="repeatInterval" value="2000">property>
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myTask"/>
<property name="cronExpression" value="0/1 * * * * ?"/>
bean>
id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger">ref>
list>
property>
public class TestJob {
private Logger logger = LoggerFactory.getLogger(TestJob.class);
public void doSomeThing() {
logger.info("------------doSomeThing-------------");
logger.info("*****:" + System.currentTimeMillis());
}
}
<bean id="testJob" class="com.yefan.task.quartz.TestJob"/>
同上,有两种方式
同上
@Component
public class QuartzService {
private Logger logger = LoggerFactory.getLogger(QuartzService.class);
@Scheduled(cron = "0/2 * * * * *")
public void process() {
logger.info("-------------------");
userService.saveUser();
System.out.println("job run...");
logger.info("--------------------");
}
}
<task:scheduled-tasks>
<task:scheduled ref="testJob" method="doSomeThing" cron="0/4 * * * * *"/>
task:scheduled-tasks>
<context:component-scan base-package=" com.yefan.task.quartz " />
同方式一
<task:scheduled-tasks>
<task:scheduled ref="testJob" method="doSomeThing" cron="0/4 * * * * *"/>
task:scheduled-tasks>
<context:component-scan base-package=" com.yefan.task.quartz " />
<task:annotation-driven/>
@Scheduled(cron = "0/2 * * * * *")
public void process() {
logger.info("-------------------");
System.out.println("job run...");
logger.info("--------------------");
}