看到楼下各位兄弟的批评指正后,确实对我很有启发,任务如果都以配置的形式出现,在项目中是很利于维护的,所以,稍作修改,呵呵。
首先要做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>
这样就搞定了,
分享到:
相关推荐
Spingboot+Quartz实现定时任务作业调度,并基于数据库对任务作业进行配置,可以实现灵活地更新和删除定时任务。
5、C#定时调度任务服务(Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务) 6、android 后台定时执行任务 示例源码 7、C# Quatrz定时任务job实现 8、Quartz.NET定时任务...
基于Java的一个简单的定时任务调度管理系统.zip 分享一个简单的定时任务调度管理系统 项目基于springboot quartz mybatis开发 1.可以支持定时任务的管理调度,实现定时任务的动态设置和统一管理; 2.目前比较简单的...
目前主流的分布式任务调度框架 个人建议用Quartz 文档全资料多 不过看自己项目需求把 TBSchedule和uncode-schedule基于zookeeper 不用数据库 总之每个框架有各自的优缺点,需求自己略做验证。 附件中有项目的下载...
quartz定时调度,数据库配置执行时间,可用,挺好的,够了
基于SpringBoot+Quartz的轻量级分布式定时任务调度系统源码+项目说明+sql数据库.zip 主要技术选型 1、后端: - SpringBoot 2.6.11 - Quartz 2.3.2 - Mybatis-Plus 3.5.3.2 - Httpclient 4.5.13 2、前端: - Layui ...
集成了分布式任务调度框架 Quartz ,任务存储于数据库。 使用SpringMVC作为路由控制, 集成 Swagger2 提供实时 RESTful API文档。 数据持久层集成 Mybatis 框架。 使用自定义注解 @TargetDataSource 实现了多数据源...
Quartz有3个核心要素:调度器(Scheduler)、任务(Job)、触发器(Trigger)。Quartz完全使用Java开发,可以集成到各种规模的应用程序中。它能够承载成千上万的任务调度,并且支持集群。它支持将数据存储到数据库中以实现...
Quartz Job Scheduling Framework[翻译]第一章. 企业应用中的作业调度 2007年11月18日 星期日 下午 12:22第一章. 企业应用中的作业调度 ·什么是作业调度 ·作业调度为什么说是重要的 ·企业应用中的作业调度 ·...
java用quartz实现的批处理定时任务调度平台(前端源码+后台jar包+数据库+使用手册),下载即用,定时任务欢乐用,本来想免费的,后面想想,收1个积分不过分吧
用spring定时器实现任务的定时调度,还可将任务状态相关持久化到数据库,方便管理,超级好用
很多的软件项目中都会使用到定时任务、定时轮询数据库同步,定时邮件通知等功能。.NET Framework具有“内置”定时器功能,通过System.Timers.Timer类。在使用Timer类需要面对的问题:计时器没有持久化机制;计时器...
Spring 3整合Quartz 1.8实现定时任务三:动态暂停 恢复 修改和删除任务 任务保存到数据库,系统启动时读取数据库,页面显示加载,并管理 注:spring3+quartz2动态任务调度,任务保存在内存中,页面显示动态管理版...
quartznet任务调度和消息调度 定时或定期执行任务的一套框架。 1)分任务,调度器,触发器。 2)任务,触发器是多对多关系。 3)可以保存任务到数据库。
直接查询或修改quartz的数据表可能会影响quartz原有的调度模式。这个DEMO使用一个间接的task数据表,所有任务的修改都在这个数据表进行,而TaskScannerJob这个任务会定时扫描task表,将更新的任务实例化成具体的JOB...
基于quartz实现分布式任务调度(定时、API);引入camunda作为任务执行框架,支持工作流式任务编排、并发批量调度和参数传递。 简介 分布式、多租户的支持流程编排的任务调度应用 同时支持Redis分布式锁和Quartz...
非常容易控制的任务调度系统 特性 兼容性好,需要定时的任务只依赖于控制台命令,能在命令行中执行的程序都可以执行。意味着可以定时执行包括exe在内的,python,nodejs,甚至matlab等程序 扩展性强,目前可以直接...
一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。版本1.5.2,内附中文帮助文档
基于.NetCore + Quartz.Net + Vue 开箱即用的定时任务UI。几乎没有上手难度,不依赖数据库,只需在界面做简单配置
quartz:是一个任务调度框架,通过触发器设置作业的定时运行规则,来执行定时任务。相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。把一系列任务自动安置到一...