Spring quartz
来源:互联网 发布:淘宝客服真的好忙好累 编辑:程序博客网 时间:2024/05/29 08:22
spring quartz 多次调用
早上测试程序的时候,发现项目下的定时任务quartz同一时刻有一个任务执行了两次,但是我清楚地记得原来是没有问题,很是懊恼。
第一步
检查配置文件,文件内有配置concurrent为false,理论上来讲应该可以防止job同时执行两次的问题。
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <!-- 要调用的工作类 -->
- <bean id="xmlJob" class="com.all58.video.quartz.XmlJob"></bean>
- <!-- 可继续加新的任务 -->
- <!-- 要调用的工作类结束 -->
- <bean id="xmlJobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <!-- 调用的类 -->
- <property name="targetObject">
- <ref bean="xmlJob"/>
- </property>
- <!-- 调用类中的方法 -->
- <property name="targetMethod">
- <value>work</value>
- </property>
- <property name="concurrent">
- <value>false</value>
- </property>
- </bean>
- <!-- 定义调用对象和调用对象的方法 -->
- <bean id="xmlJobTaskDoTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail">
- <ref bean="xmlJobTask"/>
- </property>
- <property name="cronExpression">
- <value>0 0/2 * ? * *</value>
- </property>
- </bean>
- <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序,不需要实例化对象 -->
- <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="xmlJobTaskDoTime"/>
- </list>
- </property>
- </bean>
- </beans>
既然不是quartz配置的问题,那就往上一层代码找找看吧,忽然发现SSH项目中出现了ApplicationContext被连续两次注入的问题,但是我只是在web.xml进行了一次引用配置,不应该调用两次才对...
- <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔此参数用于后面的Spring Context Loader -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext.xml</param-value>
- </context-param>
- <bean id="appContext" class="com.all58.video.util.AppContext" />
第三步
虽然不知道什么造成多次注入的问题,但总归知道是什么造成的了,从网上查一下吧 applicationContext.xml多次注入,从网上得来原因,一般的说法是:
在web.xml进行配置applicationConetxt.xml的引用会似使得注入一次,同时spring自己进行加载该文件会使得注入一次。因此造成了两次注入;
既然如此,那我就把quartz的配置提取出来不就可以了,然后我就把quartz的配置写入到了job.xml中,然后更改web.xml文件如下 :
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext.xml,classpath:job.xml</param-value>
- </context-param>
理论上来讲应该没问题了吧,但是还是不可以,applicationContext加载两次可以说得过去,但是定时任务还是被同时执行了两次,因此我得出了结果,不是applicationContext.xml被加载了两次,而是web.xml被加载了两次,从而造成了以上的结果。
那我就去查,什么情况下会出现web.xml被多次加载?
原来是TOMCAT的配置文件server.xml配置不当引起的
请看下面这段配置就是错误的:
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <Context path="" docBase="D:\apache-tomcat-6.0.14\webapps\Server" debug="0" reloadable="true"/>
由于本地中的工程有很多,所以为了方便配置了默认启动项目,添加了上面蓝色的配置,造成了第二次注入
解决办法:
1.更改server.xml中appBase=""。再次启动项目,一切正常。
2.删除蓝色配置,将项目放到tomcat\webapps\ROOT中,以此来达到默认启动的效果。
暂时只发现这两种解决办法,如果大家还有什么其他的解决办法,欢迎留言。
第二天发现一个问题,如果采用第一种解决办法,会造成多个项目存储在webapps下,同时启动的时候无法访问其他的项目的问题,即使输入http://localhost:8080/Server2也无法访问。因此建议采用第二种。
- spring+quartz
- spring quartz
- Spring + Quartz
- spring quartz
- Spring Quartz
- Quartz+Spring
- spring quartz
- spring Quartz
- Spring Quartz
- Spring quartz
- spring quartz
- Quartz spring
- Spring Quartz
- spring+quartz
- Quartz spring
- spring quartz
- Quartz+spring
- spring-quartz
- IOS程序设相关计开发技巧
- DatagramSocket编程
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- KSImageNamed-Xcode
- Java基础之随机打乱一个顺序数组
- Spring quartz
- shiro unauthorizedUrl页面不跳转问题
- VVDocumenter - Xcod代码注释工具
- 国外性能测试博客
- 一个用于张量符号计算的Mathematica工具箱package
- 字典树(讲解+模版)
- 第13周项目3--二进制转换
- IOS6 _内置字体库下载,轻松实现字体主体变换
- Java 并发:基本的线程机制