quartz 执行定时任务配置及案例
准备工作
导入jar包:\WEB-INF\lib\quartz-1.8.5.jar
web.xml中的配置如下
<!-- quartz job start --> <context-param> <param-name>quartz:wait-on-shutdown</param-name> <param-value>true</param-value> </context-param> <servlet> <servlet-name>QuartzInitializer</servlet-name> <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> <init-param> <param-name>config-file</param-name> <param-value>config/quartz_jobs.properties</param-value> </init-param> <init-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </init-param> <init-param> <!-- Start delay time 60 seconds --> <param-name>start-delay-seconds</param-name> <param-value>60</param-value> </init-param> <init-param> <param-name>start-scheduler-on-load</param-name> <param-value>true</param-value> </init-param> <load-on-startup> 5 </load-on-startup> </servlet> <!-- quartz job end -->
web.xml中配置的config/quartz_jobs.properties文件内的详细内容如下
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = SchedulerTID
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#org.quartz.jobStore.class = org.quartz.simpl.JDBCJobStore
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#org.quartz.jobStore.useProperties = false
#config dataSource
#org.quartz.jobStore.dataSource = myDS
#table prefix
#org.quartz.jobStore.tablePrefix = QRTZ_
#setting true Activate cluster characteristics
#org.quartz.jobStore.isClustered = false
#org.quartz.jobStore.maxMisfiresToHandleAtATime=1
#============================================================================
# Configure Datasources connect
#============================================================================
#one
#org.quartz.dataSource.myDS.driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
##jdbc:microsoft:sqlserver://CANGZDWSQL10;DatabaseName=COMPUPTC
#org.quartz.dataSource.myDS.URL = jdbc:microsoft:sqlserver://CANGZDWSQL10:1433;DatabaseName=COMPUPTC
#org.quartz.dataSource.myDS.user = fvpuser
#org.quartz.dataSource.myDS.password = fvpuser
#org.quartz.dataSource.myDS.maxConnections = 5
# tow jndi
#dataSourceçJNDI url
#org.quartz.dataSource.myDS.jndiURL = java:comp/env/jdbc/app4-hdcp3r7ccmp01-fvp
## used JNDI InitialContextFactory class name.
#org.quartz.dataSource.myDS.java.naming.factory.initial =
##JNDI URL
#org.quartz.dataSource.myDS.java.naming.provider.url =
##JNDI user name
#org.quartz.dataSource.myDS.java.naming.security.principal = fvpuser
##connect to JNDI
#org.quartz.dataSource.myDS.java.naming.security.credentials = fvpuser
#============================================================================
# Configure Plugins
#============================================================================
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
# v1.8 before JobInitializationPlugin
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
# /WEB-INF/config/quartz_jobs.xml,/WEB-INF/config/quartz_savejobs.xml
org.quartz.plugin.jobInitializer.fileNames = /WEB-INF/quartzjobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
quartz_jobs.properties文件内的/WEB-INF/quartzjobs.xml 详细配置 主要是指定去定时执行那个类 请看配置如下
<?xml version='1.0' encoding='utf-8'?> <job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd" version="1.8"> <schedule> <job> <name> ws_soap_job</name> <group>ErrLog</group> <description>The job description </description> <job-class>com.gmw9.quartz.WsSoapQuartzJob</job-class> </job> <trigger> <cron> <name>wsSoap-trigger</name> <group>ErrLog_GROUP</group> <job-name>ws_soap_job</job-name> <job-group>ErrLog</job-group> <cron-expression>0 0 8,12,16,20 * * ?</cron-expression> </cron> </trigger> <!-- <job> <name>jabName</name> <group>upload</group> <description>The job description </description> <job-class>com.gmw9.quartz.hongshanQuartzJob</job-class> </job> <trigger> <cron> <name>uploadFile-trigger</name> <group>upload_GROUP</group> <job-name>jabName</job-name> <job-group>upload</job-group> <cron-expression>0 10 15 22 4 ? 2016</cron-expression> </cron> </trigger> --> </schedule> </job-scheduling-data>
被执行类的案例代码如下
package com.gmw9.quartz; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class WsSoapQuartzJob implements Job { private final String JOBNAME = Constant.JOBNAME; private final static Log log = LogFactory.getLog(WsSoapQuartzJob.class); //定时任务框架会调用这个方法 @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("IVS wsSoap quartz job launch time ..." + System.currentTimeMillis()); this.wsSoapCall(); } //这里就是定时执行的内容 public void wsSoapCall(){ System.out.println("========wsSoap Call======="); } }
分类:
java各框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统