Examples
Below each category 10s invoke a function as an example. The following log output using slf4j + log4j, unnecessary output can be changed to self System.out.println
Code
Directory idea is as follows:
1. Profiles quartz_timer.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="myQuartzTimer" class="com.ydfind.demo.springtimer.MyQuartzTimer"></bean>
<bean id="myQuartzTimerJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myQuartzTimer"/>
</property>
<property name="targetMethod" value="doTask"/>
</bean>
<bean id="myQuartzTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="myQuartzTimerJob"/>
<!-- 确保quartz的版本在1.8.6及以前的,否则会报错;每10s跑一次-->
<property name="cronExpression" value="0/10 * 0-23 * * ?"/>
</bean>
<bean class = "org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="myQuartzTimerTrigger" />
</list>
</property>
</bean>
</beans>
2.log4j.xml log configuration
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "./log4j.dtd">
<log4j:configuration>
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%t] %X{operationName} %X{userId} - %m%n" />
</layout>
</appender>
<root>
<appender-ref ref="consoleAppender" />
</root>
</log4j:configuration>
3.maven of pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.ydfind</groupId>
<artifactId>spring-timer</artifactId>
<version>1.0-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<properties>
<springframework.version>4.0.6.RELEASE</springframework.version>
<quartz.version>1.8.6</quartz.version>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
<!-- Spring事务的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<!-- 定时任务框架Quartz的依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
</dependencies>
</project>
4. Timer class MyQuartzTimer.java
package com.ydfind.demo.springtimer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyQuartzTimer {
private static Logger logger = LoggerFactory.getLogger(MyQuartzTimer.class);
private static int count;
public void doTask(){
try{
synchronized (this){
count++;
}
logger.info("第" + count + "次执行!当前时间为:" + new SimpleDateFormat("yyyyMMdd HH:mm:ss:SSS").format(new Date()));
}catch(Exception e){
e.printStackTrace();
}
}
}
5. Start the timer class MyQuartzMainApp.java
package com.ydfind.demo.springtimer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class MyQuartzMainApp {
private static Logger logger = LoggerFactory.getLogger(MyQuartzMainApp.class);
public static void main(String[] args){
logger.info("将要启动定时器---------");
try{
new FileSystemXmlApplicationContext(ClassLoader.getSystemResource("quartz_timer.xml").getFile());
}catch (Exception e){
e.printStackTrace();
}
logger.info("将要结束定时器---------");
}
}
run
The main function running MyQuartzMainApp classes, as follows:
[2019-03-20 13:24:40.022][DEBUG][org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1] - Calling execute on job DEFAULT.myQuartzTimerJob
[2019-03-20 13:24:40.022][INFO][org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1] - 第1次执行!当前时间为:20190320 13:24:40:022
[2019-03-20 13:24:50.006][DEBUG][org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2] - Calling execute on job DEFAULT.myQuartzTimerJob
[2019-03-20 13:24:50.021][INFO][org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2] - 第2次执行!当前时间为:20190320 13:24:50:021
[2019-03-20 13:25:00.007][DEBUG][org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3] - Calling execute on job DEFAULT.myQuartzTimerJob
[2019-03-20 13:25:00.007][INFO][org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3] - 第3次执行!当前时间为:20190320 13:25:00:007
10s once per run correctly.