如何使用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.}
}

现在,您正在构建下一个调度应用程序!

玩得开心!

参考: 如何使用Quartz Scheduler创建Web应用程序以及如何在A Programmer's Journal博客上从我们的JCG合作伙伴 Zemian Deng进行日志记录 。

翻译自: https://www.javacodegeeks.com/2013/09/how-to-create-web-app-with-quartz-scheduler-and-logging.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端日期选择插件rolldate

rolldate为上一版jquery移动端时间插件的全新版本&#xff0c;目前保留了上一版的大部分功能&#xff0c;并且增加了回调函数&#xff0c;以及主题风格选取&#xff0c;最重要的是解决了上一版本的遗留问题&#xff0c;依赖jquery、滑动不够流畅、参数设计不够合理等等。开发日…

ik分词器 mysql php_php环境下使用elasticSearch+ik分词器进行全文搜索

首先需要说明的一点是&#xff0c;如果需要启用ik分词器&#xff0c;那么分词器的版本必须与es版本一致&#xff0c;即6.3.0的分词器需要同样6.3.0版本的es支持。安装javawin-64bit的安装包需要去java英文官网查找安装ES6.3.0版本es下载地址&#xff1a;https://www.elastic.co…

服务器如何查看gpu型号,linux 查看服务器gpu

linux 查看服务器gpu 内容精选换一换本节操作介绍通过华为云APP连接Linux实例的操作步骤。云服务器状态为“运行中”。已获取Linux云服务器用户名和密码&#xff0c;忘记密码请参考在控制台重置云耀云服务器密码重置密码。云耀云服务器已经绑定弹性公网IP。所在安全组入方向已开…

Antd-Select组件的深入用法

一、Antd-Select提供几种类型 最基础版只提供下拉功能的选择器带搜索功能的下拉选择器可多选的下拉选择器可搜索、可多选、可随意输入内容的tag下拉选择器(支持自动分词)多级联动下拉选择器搜索远程数据下拉框二、一些潜在用法 如果Select.Option选项的数量特别大:2k、3k... 假…

WS-Security:使用BinarySecurityToken进行身份验证

众所周知&#xff0c;WS-Security设定的目标之一是对SOAP消息强制执行完整性和/或保密。 在完整性的情况下&#xff0c;添加到SOAP消息的签名是数学过程的结果&#xff0c;该过程涉及发送者的私钥&#xff0c;从而导致加密的消息摘要。 默认情况下&#xff0c;大多数框架&…

Vue(ES6)中的data属性为什么不能是一个对象?

以下引官网原文&#xff1a;当一个组件被定义&#xff0c;data 必须声明为返回一个初始数据对象的函数&#xff0c;因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象&#xff0c;则所有的实例将共享引用同一个数据对象&#xff01;通过提供 data 函数&#xff…

echarts vue 柱状图实例_VUE中使用Echarts绘制柱状图

在main.js中引入echartsimport echarts from ‘echarts‘Vue.prototype.$echarts echarts在相应的vue中导入echartsimport echarts from ‘echarts‘;实现柱状图显示mounted: function () {// 基于准备好的dom&#xff0c;初始化echarts实例let myChart echarts.init(documen…

从计算机体系结构方面思考深度学习

今年 1 月&#xff0c;谷歌人工智能负责人 Jeff Dean&#xff08;当时还是谷歌大脑负责人&#xff09;与 2017 年图灵奖得主、体系结构巨擘 David Patterson&#xff08;当时获奖结果尚未公布&#xff09;联合发表了题为《计算机体系结构黄金时代&#xff1a;赋能机器学习革命》…

使用Apollo通过WebSocket通过STOMP轻松进行消息传递

在我以前的文章中&#xff0c;我介绍了几个有趣的用例&#xff0c;这些用例使用著名的消息代理HornetQ和ActiveMQ通过Websockects实现STOMP消息传递。 但是我没有介绍的是Apollo&#xff0c;因为我个人认为它的API是冗长的&#xff0c;并且不像Java开发人员那样表现力强。 尽管…

h5渲染性能一瞥

内容来源&#xff1a;2018 年 6 月 30 日&#xff0c;饿了么前端主管向勇在“饿了么技术沙龙・第27弹 【前端专场】”进行《h5渲染性能一瞥》演讲分享。IT 大咖说&#xff08;微信id&#xff1a;itdakashuo&#xff09;作为独家视频合作方&#xff0c;经主办方和讲者审阅授权发…

爬虫系列之requests

爬取百度内容&#xff1a; 1 import requests2 url "https://www.baidu.com"3 4 if __name__ __main__:5 try:6 kv {user-agent: Mozilla/5.0}7 r requests.get(url, headerskv)8 r.raise_for_status() #返回状态值&#xff0c;如果…

高并发常见面试题

1、线程与进程 进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;。文本区域存储处理器执行的代…

如何使用JSON和Servlet创建JQuery DataTable

在本文中&#xff0c;我将介绍使用简单servlet传递的JSON创建JQuery DataTable所需的基本编码。 DataTable是基于JQuery的非常强大的网格&#xff0c;具有高级功能&#xff0c;可以使用自定义功能在短时间内构建。 安装 下载最新的JQuery DataTable下载 上面的下载将提供两个…

python将json转换为excel_使用python将Excel转换为JSON_python_酷徒编程知识库

我有一个excel文件&#xff0c;我想转换为JSON文件&#xff0c;excel类似于&#xff1a;Col A Col C Col F1 A EE2 B FF4 C FF5 D HH6 D HH7 A EE8 E EE希望JSON遵循以下格式&#xff1a;{"EE": {"A": {"Col A key":"1","Col A k…

页面重绘 回流及其优化

在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解&#xff0c;页面是怎么把html结合css等显示到浏览器上的&#xff0c; 下面的流程图显示了浏览器对页面的呈现的处理流程。可能不同的浏览器略微会有些不同。但基本上都是类似的。 1. 浏览器把获取到的HTML代码解析成1…

Servlet异常和错误处理示例教程

有时我写了一篇有关Java异常处理的文章&#xff0c;但是当涉及到Web应用程序时&#xff0c;我们需要的不仅仅是Java中的异常处理。 Servlet异常 如果您注意到&#xff0c;doGet&#xff08;&#xff09;和doPost&#xff08;&#xff09;方法将抛出ServletException和IOExcept…

前端介绍开始(—)

web 的组成浏览器服务器&#xff1a;代替用户向服务器发送请求通信协议&#xff1a;规范数据传输及打包方式&#xff08;http,https&#xff09; 服务器&#xff1a;1 作用&#xff1a;1 接收用户请求并响应 2 存储数据3 具有安全性功能2 产品&#xff1a;1 Tomcat2 Aapache3 N…

python数据结构与算法13_python 数据结构与算法 (13)

python 数据结构与算法 (13)选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 置, 然后, 再从剩余未排序元素中继续寻找最?(?)元素, 然后放到已排 序序列的末尾. 以此类推, 直到所有元…

算法10-----分糖果

1、题目&#xff1a; N个孩子在队伍中&#xff0c;每个孩子都有一定的等级值&#xff0c;相邻两个孩子等级高的拿到的糖果数量要比等级低的多&#xff0c;且每个孩子至少有一个糖果&#xff0c;所以最少队伍一共需多少糖果。 There are N children standing in a line. Each ch…

小程序如何发红包

咳咳&#xff0c;直入主题。敲黑板&#xff0c;请看下面一段对话。 产品&#xff1a;我想要小程序发红包这个功能 程序员&#xff1a;目前不支持啊 产品&#xff1a;我不管&#xff01; 程序员&#xff1a;做不到啊&#xff0c;这。。。 产品&#xff1a;我不管&#xff01;我不…