如何使用Quartz Scheduler和日志记录创建Web应用程序

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz Scheduler是一个开源的调度框架,可以用于Java应用中的任务调度和定时任务管理。使用Quartz Scheduler可以轻松地创建和管理定时任务,支持多种调度方式和灵活的配置选项。 以下是使用Quartz Scheduler的步骤: 1. 引入Quartz Scheduler的依赖库。 2. 创建一个Scheduler实例。 3. 创建一个Job实现类,实现执行具体任务的逻辑。 4. 创建一个Trigger实例,用于定义任务的执行时间和执行频率。 5. 将Job和Trigger关联起来,使用Scheduler调度这个任务。 下面是一个简单的示例代码: ``` java // 创建一个Scheduler实例 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 创建一个Job实现类 public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { // 执行具体的任务逻辑 } } // 创建一个Trigger实例 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build(); // 将Job和Trigger关联起来,使用Scheduler调度这个任务 JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build(); scheduler.scheduleJob(job, trigger); // 启动Scheduler scheduler.start(); ``` 这段代码创建了一个定时任务,每隔10秒钟执行一次。可以根据需要修改Trigger的配置来改变任务的执行时间和频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值