看到楼下各位兄弟的批评指正后,确实对我很有启发,任务如果都以配置的形式出现,在项目中是很利于维护的,所以,稍作修改,呵呵。
首先要做QuartzJob定时任务类了,这个类要实现的是Job接口,然后重写execute方法,方法中就是执行你具体要做的事情了。不过首先需要一个配置文件,里面定义了一些参数,是Quartz的一些配置。配置文件如下
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# 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
#============================================================================
# Configure Plugins
#============================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = conf/quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 60
即使做成配置,这个类也必须要有,一定会有个Job类,专门做数据分析,有的朋友说配置文件搞定所有,不现实,
好了,这就是配置文件,接下来我们就要做这个计划类了,这个类执行的是去源数据库中查询数据,并插入目标数据库中,并且不允许有重复。代码如下
package com.bj58.job.servlet;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.bj58.job.utils.ConnectionFactory_DB_dest;
import com.bj58.job.utils.ConnectionFactory_DB_src;
/**
* 定时任务类
* @author zhangwan@58.com
* Jun 8, 2010
*
*/
public class QuartzJob implements Job {
private static final Log log = LogFactory.getLog(Job.class);
private static final String findSql_src = "select PortalId from t_portalinfo";
private static final String findSql_dest = "select userId from t_user";
private static final String insertSql_dest = "insert into t_user(userId) values (?)";
/**
* 执行任务方法
*/
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Connection conn_db_src = ConnectionFactory_DB_src.getConnection();
Connection conn_db_dest = ConnectionFactory_DB_dest.getConnection();
PreparedStatement pstmt_src = null;
PreparedStatement pstmt_dest = null;
ResultSet rs_src = null;
ResultSet rs_dest = null;
try {
pstmt_src = conn_db_src.prepareStatement(findSql_src);
rs_src = pstmt_src.executeQuery();
pstmt_dest = conn_db_dest.prepareStatement(findSql_dest);
rs_dest = pstmt_dest.executeQuery();
pstmt_dest = conn_db_dest.prepareStatement(insertSql_dest);
while(rs_dest.next()) { //第二次或第n次入库,第一次入库的话rs_dest没有结果,所以此段操作都不执行
String userId = rs_dest.getString(1);
while (rs_src.next()) {
String protalId = rs_src.getString(1);
if(userId.equals(protalId)) { //如果两个结果相同,则不进行入库
break;
} else {
pstmt_dest.setString(1, protalId);
pstmt_dest.execute();
}
}
}
while (rs_src.next()) { //如果是第一次入库
String protalId = rs_src.getString(1);
pstmt_dest.setString(1, protalId);
pstmt_dest.execute();
}
log.info("存储数据...");
} catch (SQLException e) {
log.info("存储数据出现异常...");
e.printStackTrace();
} finally {
ConnectionFactory_DB_dest.free(rs_dest, pstmt_dest, conn_db_dest);
ConnectionFactory_DB_src.free(rs_src, pstmt_src, conn_db_src);
log.info("数据库连接已经关闭...");
}
}
}
这里一次性查出了源数据库中所有字段,因为源数据库表中的数据最多不会超过10000条,我在做测试的时候,在本机上发现一次查询10W条也不会出现结果集溢出情况,所以这里就忽略这个问题了。
然后需要这么个配置文件quartz_jobs.xml,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<job>
<job-detail>
<name>PortalInfoJob</name>
<group>PortalInfo</group>
<job-class>com.bj58.portalcrm.web.job.PortalInfoJob</job-class>
</job-detail>
<trigger>
<cron>
<name>PORTALINFO</name>
<job-name>PortalInfoJob</job-name>
<job-group>PortalInfo</job-group>
<cron-expression>0 0 1 * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
ok,最后就是web.xml文件配置一下,Quartz提供了个初始化的Servlet,呵呵,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Quartz配置计划 -->
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</init-param>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
</web-app>
这样就搞定了,
分享到:
相关推荐
结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...
在"Quartz.net作业调度自定义定时执行任务多任务执行c#"这个主题中,我们将深入探讨如何使用Quartz.NET来实现自定义的定时任务,以及如何处理多任务执行。 首先,我们需要理解Quartz.NET的基本概念。在Quartz.NET中...
首先,Quartz是一个开源的作业调度框架,它允许开发者创建、安排和执行定时任务。Quartz支持从数据库存储作业和触发器,这样可以方便地进行任务的持久化和集群环境下的任务同步。 1. **Spring与Quartz的集成**:...
SpringBoot整合Quartz实现定时任务调度是企业级应用中常见的需求,主要用于自动化执行某些周期性的任务,例如数据备份、报表生成、系统维护等。Quartz是一个功能强大的开源作业调度框架,能够灵活地定义任务和调度...
Spring 整合任务调度框架 Quartz 在软件开发中,任务调度框架是非常重要的一部分,它可以帮助开发者更好地管理和执行各种任务。在 Java 领域中,Quartz 是一个非常流行的任务调度框架,而 Spring 是一个非常流行的 ...
Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...
了解这些表的结构和作用,可以帮助我们更好地理解和管理Quartz定时任务,包括创建、查询、更新和删除任务。在实际应用中,可以结合Quartz API进行相应的数据库操作,实现灵活的任务调度和管理。希望这些信息能对您在...
Spring Boot作为一个轻量级的Java框架,提供了与各种定时任务库集成的能力,其中Quartz是一个广泛应用的开源作业调度框架。本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的...
5、C#定时调度任务服务(Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务) 6、android 后台定时执行任务 示例源码 7、C# Quatrz定时任务job实现 8、Quartz.NET定时任务...
该类可能包括了对数据库表的操作,例如添加、更新和查询定时任务的相关记录。 `Program.cs` 是ASP.NET Core应用的入口点,通常在这里启用Furion框架并配置定时任务服务。通过调用`UseFurion()`扩展方法,我们可以...
Quartz还支持集群和持久化,这意味着多个Quartz实例可以在分布式环境中协作调度任务,而且任务的状态和计划可以存储在数据库中,保证了高可用性和容错性。通过Spring与Quartz的整合,可以轻松地在Spring应用中管理...
【数据库管理Quartz定时任务】 在企业级应用中,经常需要执行一些按计划进行的任务,例如数据备份、报表生成、清理过期数据等。Quartz是一个开源的作业调度框架,它允许开发人员定义和调度任务,以便在指定的时间点...
Quartz任务调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于自动化定时任务的执行。它提供了灵活的任务调度机制,使得开发者可以方便地定义、安排和执行各种任务。在与Spring框架整合后,Quartz...
Quartz是Java领域中广泛应用的一款开源的作业调度框架,它允许开发者在应用程序中安排复杂的定时任务。本教程将深入探讨Quartz的核心概念、配置、API使用以及如何在实际项目中集成和管理定时任务。 一、Quartz核心...
在Java世界里,Quartz是一个强大的、完全开源的作业调度框架,广泛用于构建复杂的时间触发任务。本篇文章将深入探讨如何使用Quartz在Java应用程序中实现任务调度。 Quartz库提供了一个灵活的API,可以创建、调度和...
总之,Quartz作为一款强大的任务调度框架,无论是在小型项目还是大型企业级应用中,都能够提供可靠的定时任务管理解决方案。结合提供的文档,你将能够全面掌握Quartz的使用技巧,从而提升你的系统设计和开发能力。
在许多现代应用程序中,特别是在企业级应用中,往往需要实现对某些任务的周期性调度执行,例如定期备份数据库、定时发送邮件通知等。Quartz 是一个开源的作业调度框架,能够帮助开发者轻松地在 Java 应用程序中实现...
任务调度器通常用于更复杂的场景,例如在服务器上定期运行脚本、执行数据库备份、监控系统性能等。Windows操作系统上的任务计划程序就是一种常见的任务调度器实例。 Quartz是Java平台上广泛使用的一个开源任务调度...
总的来说,"ssm集成quartz完成定时任务"是一个将企业级任务调度能力与Java Web开发相结合的实例,通过这个项目,开发者可以学习如何在SSM环境中有效地管理和执行定时任务,提升系统的自动化水平。