我有时会在Quartz Scheduler论坛中为用户提供帮助。 有时,有人会问他/她如何在Web应用程序中设置Quartz。 实际上,这是一件相当简单的事情。 该库已经带有一个ServletContextListener
,您可以使用它启动调度程序。 我将在这里向您展示一个简单的webapp示例。
首先创建一个Maven 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>quartz-web-demo</groupId>
<artifactId>quartz-web-demo</artifactId>
<packaging>war</packaging>
<version>1.0-SANPSHOT</version>
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
</project>
然后,您需要创建一个src/main/webapp/META-INF/web.xml
文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>quartz:config-file</param-name>
<param-value>quartz.properties</param-value>
</context-param>
<context-param>
<param-name>quartz:shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>quartz:wait-on-shutdown</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>quartz:start-on-load</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>
</web-app>
最后,您需要Scheduler的src/main/resources/quartz.properties
配置文件。
# Main Quartz configuration
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = MyQuartzScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
您可以使用Quartz配置许多其他功能 ,但是上面的内容应该像在内存调度程序中一样使您入门。
现在,您应该可以编译并运行它了。
bash> mvn compile
bash> mvn org.apache.tomcat.maven:tomcat7-maven-plugin:2.1:run -Dmaven.tomcat.port=8081
如何为Quartz Scheduler配置日志记录
另一个常见问题是他们如何设置日志记录并查看DEBUG级别的消息。 Quartz Scheduler使用SLF4J,因此您可以选择许多记录器选项 。 下面,我将向您展示如何设置Log4j。
首先,将其添加到您的pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
然后添加src/main/resources/log4j.properties
文件以将消息显示到STDOUT上。
log4j.rootLogger=INFO, stdout
log4j.logger.org.quartz=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
在命令行上重新启动Web应用程序,现在您应该看到所有来自Quartz库的DEBUG级别的日志记录消息。
在一切正常运行的情况下,您的下一个问题可能是询问您如何从Web应用程序访问调度程序? 好了,当调度程序由Servlet上下文侦听器创建时,它使用org.quartz.impl.StdSchedulerFactory.KEY
键存储在Web应用程序的ServletContext空间中。 因此,您可以像下面这样检索它并在您自己的Servlet中使用它:
public class YourServlet extends HttpServlet {
public init(ServletConfig cfg) {
String key = "org.quartz.impl.StdSchedulerFactory.KEY";
ServletContext servletContext = cfg.getServletContext();
StdSchedulerFactory factory = (StdSchedulerFactory) servletContext.getAttribute(key);
Scheduler quartzScheduler = factory.getScheduler("MyQuartzScheduler");
// TODO use quartzScheduler here.
}
}
现在,您正在构建下一个调度应用程序!
玩得开心!
翻译自: https://www.javacodegeeks.com/2013/09/how-to-create-web-app-with-quartz-scheduler-and-logging.html