产品
解决方案
文档与社区
免费试用
定价
云市场
合作伙伴
支持与服务
了解阿里云
备案
控制台
登录/注册
开发者社区
首页
探索云世界
新手上云
云上应用构建
云上数据管理
云上探索人工智能
云计算
弹性计算
无影
存储
网络
倚天
云原生
容器
serverless
中间件
微服务
可观测
消息队列
数据库
关系型数据库
NoSQL数据库
数据仓库
数据管理工具
PolarDB开源
向量数据库
热门
Modelscope模型即服务
弹性计算
云原生
数据库
物联网
云效DevOps
龙蜥操作系统
平头哥
钉钉开放平台
大数据
大数据计算
实时数仓Hologres
实时计算Flink
E-MapReduce
DataWorks
Elasticsearch
机器学习平台PAI
智能搜索推荐
人工智能
机器学习平台PAI
视觉智能开放平台
智能语音交互
自然语言处理
多模态模型
pythonsdk
通用模型
开发与运维
云效DevOps
钉钉宜搭
支持服务
镜像站
码上公益
问产品
动手实践
考认证
TIANCHI大赛
活动广场
任务中心
飞天Club技术沙龙
训练营
话题
开发者评测
乘风者计划
阿里云MVP
直播
下载
镜像站
技术资料
插件
开发者社区
开发与运维
文章
正文
企业定时任务调度器Quartz,定时查询数据库(这里还需要继续做研究)
2013-09-22
1590
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和 《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:
看到楼下各位兄弟的批评指正后,确实对我很有启发,任务如果都以配置的形式出现,在项目中是很利于维护的,所以,稍作修改,呵呵。 首先要做QuartzJob定时任务类了,这个类要实现的是Job接口,然后重写execute方法,方法中就是执行你具体要做的事情了。不过首先需要一个配置文件,里面定义了一些参数,是Quartz的一些配置。配置文件如下 Java代码
+关注继续查看
看到楼下各位兄弟的批评指正后,确实对我很有启发,任务如果都以配置的形式出现,在项目中是很利于维护的,所以,稍作修改,呵呵。
首先要做QuartzJob定时任务类了,这个类要实现的是Job接口,然后重写execute方法,方法中就是执行你具体要做的事情了。不过首先需要一个配置文件,里面定义了一些参数,是Quartz的一些配置。配置文件如下
Java代码
#============================================================================
# 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类,专门做数据分析,有的朋友说配置文件搞定所有,不现实,
好了,这就是配置文件,接下来我们就要做这个计划类了,这个类执行的是去源数据库中查询数据,并插入目标数据库中,并且不允许有重复。代码如下
Java代码
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,内容如下
Java代码
<?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,呵呵,内容如下
Java代码
<?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>
这样就搞定了,
文章标签:
数据库
Java
数据格式
调度
XML
数据挖掘
存储
数据库连接
开发框架
涂作权
目录
相关文章
yangnk42
|
24天前
|
消息中间件
算法
Java
定时任务实现方案总结
定时任务实现方案总结
yangnk42
22
0
0
zhaokk
|
4月前
|
负载均衡
Java
数据挖掘
定时任务实现的几种方式
定时任务实现的几种方式
zhaokk
157
1
1
杨冰冰1
|
10月前
|
小程序
调度
数据库
jeecg-boot集成xxl-job调度平台,每秒/每分钟/手动都能执行成功,但是设置固定时间不触发?
jeecg-boot集成xxl-job调度平台,每秒/每分钟/手动都能执行成功,但是设置固定时间不触发?
杨冰冰1
401
0
0
章为忠学架构
|
存储
负载均衡
监控
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
定时任务系统在应用平台中的重要性不言而喻,特别是互联网电商、金融等行业更是离不开定时任务。在任务数量不多、执行频率不高时,单台服务器完全能够满足。但是随着业务逐渐增加,定时任务系统必须具备高可用和水平扩展的能力,单台服务器已经不能满足需求。因此需要把定时任务系统部署到集群中,实现分布式定时任务系统集群。
章为忠学架构
2957
1
10
游客bpby77s4lannm
|
调度
Quartz3定时任务学习之异步调度器
Quartz3定时任务学习之异步调度器 Quartz3与Quartz2的主要区别有两点: 1,Quartz3将它的资源类库拆的更细了,比如,想使用Quartz3开发,最少要引用Quartz,Quartz.Jobs,Quartz.Plugins这三个类库。 2,Quartz3整体上使用的是异步创建实例,所以我们使用时就必须要async,await的语法。 下面我们用Quartz3来做一个任务调度。
游客bpby77s4lannm
779
0
0
爱余星痕
quartz获取定时任务下次执行的时间
quartz很多人都会用,但需要配置cronExpression. 这个cronExpression很多技术人员都要配置,但很多情况,我们要知道这个cronExpression下次执行的时间是啥,让非技术人员很直观的看到下一个定时任务的执行时间。
爱余星痕
2916
0
0
小麋鹿666
|
Java
PHP
调度
Quartz实现动态定时任务
小麋鹿666
946
0
0
铭凡
|
调度
数据库
集群环境下,谁偷走quartz配置的定时任务
铭凡
4102
0
0
无信不立
|
负载均衡
Java
Shell
定时组件quartz系列<三>quartz调度机制调研及源码分析
quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的java任务调度框架,功能强大配置灵活.
无信不立
1399
0
0
tony~tian
|
XML
Java
调度
springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法)
1:实现触发器,最大的问题是jar包的处理(*.jar定时jar和sourcecodesource code): 此处,最关键的jar为第二个,名字最长。 maven依赖: <dependency> <groupId>org.apache.servicemix.bundles</groupId> <artifactId&g
tony~tian
4217
0
0
热门文章
最新文章
1
mysql下载源码方法
2
windows如何向阿里云服务器传递文件
3
整理一些计算机基础知识!
4
如何应用OSS的内网地址
5
阿里云服务器价格表,阿里云服务器购买价格出炉(2023更新)
6
企业数字化咨询服务
7
《21世纪机器人》一一3.2 从图纸到塑料模型
8
2016年物联网技术将成主流?
9
WebLogic口令猜解工具【Python脚本】
10
过年回家,程序猿最怕的5件事
1
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
29446
2
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24093
3
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
17482
4
为笔记本更换固态硬盘的方法
17642
5
重生之---我测阿里云U1实例(通用算力型)
36086
6
抽丝剥茧C语言(初阶 下)(下)
17196
7
如何保证分布式文件系统的数据一致性
30468
8
设计模式(C++版)
35291
9
灵骏可预期网络:Built for AI Infrastructure
29199
10
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
35626
相关产品
云迁移中心
文档详情
产品详情
相关电子书
更多
低代码开发师(初级)实战教程
阿里巴巴DevOps 最佳实践手册
冬季实战营第三期:MySQL数据库进阶实战
推荐文章
更多
重磅来袭!参与评测赢Iphone14 pro!
文件存储NAS评测征集令!
招募!寻找技术人的伯乐!
乘风者计划邀您入驻社区,精彩权益即刻享
下一篇
部署并使用Docker(CentOS 8)