1、<!--maven 依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
2、<!-- web.xml配置 -->
<!-- 设置Spring的监听,项目启动时候初始化 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定Spring配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
3、<!--spring配置文件-->
<bean id="jobBeanRiseStatistic" class="com.peanut.p2p.quartz.RiseStatistic"/><!--需要我们写的类,定时任务处理逻辑-->
<bean id="jobDetail00" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jobBeanRiseStatistic"/><!--调用的类-->
<property name="targetMethod" value="execute"/> <!-- 调用类中的方法:value为类中的方法名 -->
<property name="concurrent" value="false"/><!--将并发设置为false-->
</bean>
<!-- 定义触发时间 -->
<bean id="trigger00" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail00"/>
<!-- cronExpression表达式 时间调用间隔,为秒 -->
<property name="cronExpression" value="0 30 7,9,11,13,15,17,19,20 * * ?"/>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<!-- 如果lazy-init='true',则需要实例化该bean才能执行调度程序 -->
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<property name="triggers">
<list>
<!--作业调度群,list下可以加入其它的调度器-->
<ref bean="trigger00" />
</list>
</property>
</bean>
4、//定时任务处理类
public class RiseStatistic {
public void execute(){
//定时处理的逻辑。。。。。。
}
}
5、spring定时任务执行两次的原理和处理方法?
现象:本地测试定时任务是OK的,只执行一次,但是放到外网linux系统上,执行2次。
原因:定时任务实例化了2次;原因是tomcat加载完appBase="webapps"之后又去加载docBase,因此造成加载两次项目的问题。
解决:罪魁祸首是tomcat下的server.xml文件。appbase改为空,docBase改为绝对路径。
例:
<Host name="localhost" appBase="" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="/usr/local/src/tomcat-emall/webapps/emall" path="/" reloadable="true" />
</Host>