我有时会在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