quartz框架使用 && Spring整合quartz

工程结构:

nospring包下的两个类用于非spring环境下的quartz demo演示

springenv包下的两个类用于spring环境下的quartz demo演示

不多BB了,我上来就先贴个POM.XML,因为我不写跑不起来的东西,跑不起来我写这博客误人子弟作甚?

pom.xml :

<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">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.chenjun</groupId>
	<artifactId>QtzTest</artifactId>
	<version>1.0</version>
	<packaging>jar</packaging>

	<name>QtzTest</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<springframework.version>3.1.4.RELEASE</springframework.version>
		<slf4j.version>1.7.7</slf4j.version>
		<logback-classic.version>1.1.7</logback-classic.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>1.8.6</version>
		</dependency>
		
		<!-- LOGGING begin -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback-classic.version}</version>
			<scope>test</scope>
		</dependency>
		<!-- common-logging 实际调用slf4j -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<!-- java.util.logging 实际调用slf4j -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<!-- LOGGING end -->

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>jetty-maven-plugin</artifactId>
				<version>7.5.4.v20111024</version>
				<configuration>
					<scanIntervalSeconds>10</scanIntervalSeconds>
					<webApp>
						<contextPath>/${project.artifactId}</contextPath>
					</webApp>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

(一)非spring环境下

1、新建一个MyJob.JAVA

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;

public class MyJob implements StatefulJob
{
	public void execute(JobExecutionContext arg0) throws JobExecutionException
	{
		System.out.println("触发!");
	}
}

2、新建一个MySchedule.java

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

/**
 * Hello world!
 */
public class MySchedule
{
	public static void main(String[] args)
	{
		SchedulerFactory factory=new StdSchedulerFactory();
		Scheduler scheduler;
		try
		{
			//调度器
			scheduler = factory.getScheduler();
			scheduler.start();
			
			//job详细  
			JobDetail jobDetail = new JobDetail("MyJob",null, MyJob.class);
			
			//触发器
			Trigger trigger = TriggerUtils.makeSecondlyTrigger(1);
			trigger.setName("MyTrigger");
			
			scheduler.scheduleJob(jobDetail, trigger);
		}
		catch (SchedulerException e)
		{
			e.printStackTrace();
		}
	}
}

MySchedule.JAVA 右键->运行

跑一下,每秒钟输出~~~ 如下图

(二)spring环境下 :

1、新建一个类SimpleJob.java:

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SimpleJob extends QuartzJobBean
{
	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException
	{
		String message = context.getJobDetail().getJobDataMap().getString("message");
		System.out.println(message);
	}
}

2、新建一个类SimpleSpringQuartz.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SimpleSpringQuartz
{
	public static void main(String[] args)
	{
		ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
	}
}

3。新建logback.XML:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>/tmp/logs/myspring.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>/tmp/logs/ty.%d{yyyy-MM-dd HH:mm:ss.SSS}.log</fileNamePattern>
		</rollingPolicy>
		<encoder>
			<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- project default level -->
	<logger name="com.chenjun.QtzTest" level="INFO" />

	<!--log4jdbc -->
	<logger name="jdbc.sqltiming" level="INFO"/>

	<root level="INFO">
		<appender-ref ref="console" />
		<appender-ref ref="rollingFile" />
	</root>
</configuration>

4。新建spring.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
			http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/jee 
			http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
			http://www.springframework.org/schema/tx 
			http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
			http://www.springframework.org/schema/aop 
			http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">


	<bean name="simpleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.chenjun.QtzTest.springenv.SimpleJob" />
		<property name="jobDataAsMap">
			<map>
				<entry key="message" value="Welcome to Quartz" />
			</map>
		</property>
	</bean>

	<bean name="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
		<property name="jobDetail" ref="simpleJob" />
		<property name="startDelay" value="0" />
		<property name="repeatInterval" value="1000" />
	</bean>

	<bean name="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="simpleTrigger" />
			</list>
		</property>
	</bean>
</beans>

Spring环境下 输出结果:如下图:

猜你喜欢

转载自my.oschina.net/u/2338224/blog/910744