在本教程中,我们将向您展示如何集成Struts 2 + Spring 3 + Quartz 1.8.6 。
为什么不石英2?
当前,Spring 3仍不支持Quartz 2 API,请参阅此SPR-8581错误报告 。 修正了错误后,将再次更新本文。
使用的工具
- 春天3.1.5。发布
- 石英1.8.6
- Struts2.3.4
- Struts2-spring-plugin 2.3.4
- Maven 3
- Eclipse 4.2
1.项目文件夹
这是最终的项目文件夹结构。
2.依赖库
集成与该Spring 2.5.6 + Quartz 1.6相似,只是Spring3的依赖项有些混乱,请阅读下面的Maven pom.xml,了解开发本教程所需的所有依赖项。
请参阅XML注释,以了解为什么需要该jar。
档案:pom.xml
...
<dependencies>
<!-- Struts 2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.4</version>
</dependency>
<!-- Quartz framework -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.6</version>
</dependency>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- QuartzJobBean in spring-context-support.jar -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- Struts 2 + Spring 3 need this jar, ContextLoaderListener -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- Spring + Quartz need transaction -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- Struts 2 + Spring integration plugins -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.4</version>
</dependency>
</dependencies>
...
3.Spring3 +石英
为了集成Spring3和Quartz,创建一个类扩展org.springframework.scheduling.quartz.QuartzJobBean
,并实现executeInternal()
方法,就像在Quartz中创建调度程序作业一样。
文件:SchedulerJob.java
package com.mkyong.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class SchedulerJob extends QuartzJobBean
{
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2");
}
}
File:applicationContext.xml –将整个Quartz的调度程序和Spring详细信息放在applicationContext.xml
。 有关详细信息,请参见XML注释。
<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">
<!-- Spring Quartz Scheduler job -->
<bean name="schedulerJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.mkyong.quartz.SchedulerJob" />
</bean>
<!-- Cron Trigger, run every 10 seconds -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="schedulerJob" />
<property name="cronExpression" value="0/10 * * * * ?" />
</bean>
<!-- DI -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="schedulerJob" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>
4.Struts2 +弹簧3
要集成Struts 2 + Spring ,只需将org.springframework.web.context.ContextLoaderListener
侦听器类放在web.xml
文件中。
注意
有关详细信息,请阅读此Struts 2 + Spring集成示例 。
档案:web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Struts 2 Web Application</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
5.演示
完成后,启动Strut2时,它将调用Spring并运行定义的Quartz的作业。
Jul 24, 2012 4:49:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jul 24, 2012 4:49:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jul 24, 2012 4:49:07 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3430 ms
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2 //run this every 10 seconds.
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2
下载源代码
下载它– Struts2-Spring3-Quartz-Example.zip (20 KB)。
参考文献
- Struts 2 + Spring集成示例
- Struts 2 Spring插件文档
- QuartzJobBean JavaDoc
- Spring应该支持Quartz 2.0 CronTrigger接口
- Struts 2 + Spring 2.5.6 + Quartz集成示例
翻译自: https://mkyong.com/struts2/struts-2-spring-3-quartz-1-8-scheduler-example/