- 浏览: 568903 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (267)
- 随笔 (4)
- Spring (13)
- Java (61)
- HTTP (3)
- Windows (1)
- CI(Continuous Integration) (3)
- Dozer (1)
- Apache (11)
- DB (7)
- Architecture (41)
- Design Patterns (11)
- Test (5)
- Agile (1)
- ORM (3)
- PMP (2)
- ESB (2)
- Maven (5)
- IDE (1)
- Camel (1)
- Webservice (3)
- MySQL (6)
- CentOS (14)
- Linux (19)
- BI (3)
- RPC (2)
- Cluster (9)
- NoSQL (7)
- Oracle (25)
- Loadbalance (7)
- Web (5)
- tomcat (1)
- freemarker (1)
- 制造 (0)
最新评论
-
panamera:
如果设置了连接需要密码,Dynamic Broker-Clus ...
ActiveMQ 集群配置 -
panamera:
请问你的最后一种模式Broker-C节点是不是应该也要修改持久 ...
ActiveMQ 集群配置 -
maosheng:
longshao_feng 写道楼主使用 文件共享 模式的ma ...
ActiveMQ 集群配置 -
longshao_feng:
楼主使用 文件共享 模式的master-slave,produ ...
ActiveMQ 集群配置 -
tanglanwen:
感触很深,必定谨记!
少走弯路的十条忠告
Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面是在Spring中配置Quartz:
<!-- ***************属性配置文件读入 ,多个用逗号隔开*************** -->
<context:property-placeholder location="classpath:conf/ibatis/jdbc.properties , classpath:config.properties" />
<!-- ************************数据源连接配置********************* -->
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>${driver}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
<!-- ************************定时任务配置********************* -->
<!-- 要调用的工作类 -->
<bean id="quartzJob" class="com.maosheng.util.schedule.ProductSynJob">
<property name="host" value="${ftp_host}" />
<property name="port" value="${ftp_port}" />
<property name="username" value="${ftp_username}" />
<property name="password" value="${ftp_password}" />
<property name="remotePath" value="${ftp_remotePath}" />
<property name="localPath" value="${ftp_localPath}" />
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
<!-- 定义触发时间 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask"/>
</property>
<!-- cron表达式 每天上午14:30触发-->
<property name="cronExpression">
<value>0 30 14 ? * *</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="doTime"/>
</list>
</property>
</bean>
<!--********************************************************************-->
<!--***************************config.properties*******************-->
#FTP config parameter
ftp_host=110.18.14.250
ftp_port=21
ftp_username=test
ftp_password=test
ftp_remotePath=D:\download
ftp_localPath=D:\oracle\myfile
<!--**************************jdbc.properties******************** -->
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@110.18.14.250:1521:orcl
username=test
password=testpwd
package com.maosheng.util.schedule;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author maosheng
*
*/
public class ProductSynJob{
final static Logger logger = LoggerFactory
.getLogger(ProductSynJob.class);
//FTP服务器hostname
private String host;
//FTP服务器端口
private int port;
//FTP登录账号
private String username;
//FTP登录密码
private String password;
//FTP服务器上的相对路径
private String remotePath;
//下载后保存到本地的路径
private String localPath;
private DataSource dataSource;
/**
*
* 创建人 :maosheng
* 创建时间:2013-5-7
* 功能描述:同步处理程序
*/
public void execute() {
//下载同步理财产品文件
List<String> files_path = FTPUtil.downFile(host, port, username,
password, remotePath, localPath);
if (files_path != null && files_path.size() == 1) {
String file_name=files_path.get(0);
logger.info("下载同步产品文件"+file_name);
//解析同步产品文件并入库
Connection connection = null;
CallableStatement callableStatement = null;
int result=0;
try {
connection = dataSource.getConnection();
callableStatement=connection.prepareCall("{ call PR_FINANCE_PRODUCT_PARSE(?,?) }");
callableStatement.setString(1,file_name);
callableStatement.registerOutParameter(2, OracleTypes.INTEGER);
callableStatement.execute();
result = callableStatement.getInt(2);
if(result==1){
logger.info("解析同步产品文件,成功完成");
}else
{
logger.info("解析同步产品文件,完成失败");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(callableStatement!=null){
callableStatement.close();
}
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRemotePath() {
return remotePath;
}
public void setRemotePath(String remotePath) {
this.remotePath = remotePath;
}
public String getLocalPath() {
return localPath;
}
public void setLocalPath(String localPath) {
this.localPath = localPath;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
<!-- ***************属性配置文件读入 ,多个用逗号隔开*************** -->
<context:property-placeholder location="classpath:conf/ibatis/jdbc.properties , classpath:config.properties" />
<!-- ************************数据源连接配置********************* -->
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>${driver}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
<!-- ************************定时任务配置********************* -->
<!-- 要调用的工作类 -->
<bean id="quartzJob" class="com.maosheng.util.schedule.ProductSynJob">
<property name="host" value="${ftp_host}" />
<property name="port" value="${ftp_port}" />
<property name="username" value="${ftp_username}" />
<property name="password" value="${ftp_password}" />
<property name="remotePath" value="${ftp_remotePath}" />
<property name="localPath" value="${ftp_localPath}" />
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
<!-- 定义触发时间 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask"/>
</property>
<!-- cron表达式 每天上午14:30触发-->
<property name="cronExpression">
<value>0 30 14 ? * *</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="doTime"/>
</list>
</property>
</bean>
<!--********************************************************************-->
<!--***************************config.properties*******************-->
#FTP config parameter
ftp_host=110.18.14.250
ftp_port=21
ftp_username=test
ftp_password=test
ftp_remotePath=D:\download
ftp_localPath=D:\oracle\myfile
<!--**************************jdbc.properties******************** -->
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@110.18.14.250:1521:orcl
username=test
password=testpwd
package com.maosheng.util.schedule;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author maosheng
*
*/
public class ProductSynJob{
final static Logger logger = LoggerFactory
.getLogger(ProductSynJob.class);
//FTP服务器hostname
private String host;
//FTP服务器端口
private int port;
//FTP登录账号
private String username;
//FTP登录密码
private String password;
//FTP服务器上的相对路径
private String remotePath;
//下载后保存到本地的路径
private String localPath;
private DataSource dataSource;
/**
*
* 创建人 :maosheng
* 创建时间:2013-5-7
* 功能描述:同步处理程序
*/
public void execute() {
//下载同步理财产品文件
List<String> files_path = FTPUtil.downFile(host, port, username,
password, remotePath, localPath);
if (files_path != null && files_path.size() == 1) {
String file_name=files_path.get(0);
logger.info("下载同步产品文件"+file_name);
//解析同步产品文件并入库
Connection connection = null;
CallableStatement callableStatement = null;
int result=0;
try {
connection = dataSource.getConnection();
callableStatement=connection.prepareCall("{ call PR_FINANCE_PRODUCT_PARSE(?,?) }");
callableStatement.setString(1,file_name);
callableStatement.registerOutParameter(2, OracleTypes.INTEGER);
callableStatement.execute();
result = callableStatement.getInt(2);
if(result==1){
logger.info("解析同步产品文件,成功完成");
}else
{
logger.info("解析同步产品文件,完成失败");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(callableStatement!=null){
callableStatement.close();
}
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRemotePath() {
return remotePath;
}
public void setRemotePath(String remotePath) {
this.remotePath = remotePath;
}
public String getLocalPath() {
return localPath;
}
public void setLocalPath(String localPath) {
this.localPath = localPath;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
发表评论
-
java 类的加载 以及 ClassLoader
2020-04-16 09:43 486Class Loader 类加载器: 类加载器负责加载 ... -
Stack 的实现原理深入剖析
2020-04-06 13:26 495Stack 介绍: Stack是栈。 ... -
Vector 的实现原理深入剖析
2020-04-06 13:17 371Vector介绍: Vector 是矢量队列,它是JDK1. ... -
JDK 分析工具
2020-04-05 17:30 395常用分析工具: jps:显示指定系统中所有的HotSpot虚 ... -
二叉树的深度优先遍历和广度优先遍历
2020-03-10 09:33 626概述: 1、深度优先遍历(Depth-First-Sear ... -
Hashtable 的实现原理深入剖析
2020-02-18 20:59 577一、Hashtable的基本方法: 1、定义: HashT ... -
jdk 1.8 新特性
2020-02-17 13:43 3911、default关键字 ... -
Java IO 架构
2019-11-11 16:39 354主要两类: 磁盘I/O 网络I/O 基于字节 ... -
Java 数据结构与算法
2019-04-03 10:25 530程序=数据结构+算法 ... -
Java语言异常(Exception)
2018-10-09 11:40 554异常,是Java中非常常用 ... -
Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
2018-08-17 09:47 1479首先介绍一些乐观锁与 ... -
Java 高性能编程注意事项
2016-11-17 09:55 6521. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担, ... -
Netty 解析
2017-03-07 13:47 1228Linux网络IO模型: Linux ... -
2016年Java 面试题总结
2016-01-18 13:34 54803多线程、并发及线程的基础问题: 1)Java 中能创建 vo ... -
java 内存模型
2015-12-29 13:44 821JAVA内存模型: Java内存 ... -
JVM 深入剖析
2015-12-29 12:51 1100JVM是JAVA虚拟机(JAVA Virtual Machin ... -
Java 并发编程_Synchronized
2015-12-16 12:42 877硬件的效率和一致性: 由于计算机的运算速度和它的存储和通讯子 ... -
Java 并发编程_Volatile
2015-12-15 13:42 624术语定义: 共享变量:在多个线程之间能够被共享的变量被称为共 ... -
Java 并发编程_ConcurrentLinkedQueue
2015-12-15 13:32 913ConcurrentLinkedQueue 的分析和使用: ... -
Java 并发编程_ConcurrentHashMap
2015-11-10 11:30 836ConcurrentHashMap 的分析和 ...
相关推荐
总结,通过以上步骤,我们就成功地在Spring 3中配置了Quartz定时任务,实现了每10秒执行一次的任务。在实际应用中,你可以根据需求定义更复杂的作业和触发器,以及使用Quartz的其他高级特性,如集群支持、持久化作业...
以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及涉及的Spring Cloud Alibaba、Dubbo和Nacos的相关知识。 首先,我们需要在`pom.xml`中引入相关的依赖。Spring Boot的`spring-boot-...
Spring Boot 配置 Quartz 定时任务(csdn)————程序
以上就是Spring 3.x中配置和使用Quartz定时任务的基本步骤。通过这种方式,你可以灵活地控制任务的执行频率和逻辑,从而满足各种复杂的定时需求。在实际项目中,你可能需要根据具体需求调整配置,例如添加更复杂的`...
2. **配置Quartz**:在Spring的配置文件(如applicationContext.xml)中,声明Quartz的相关bean,包括`SchedulerFactoryBean`,它是Quartz与Spring集成的关键: ```xml <bean id="schedulerFactoryBean" class="org....
总结起来,Spring中的Quartz定时任务配置涉及到创建Job Bean、定义Job Detail Bean来指定执行方法,以及设置Cron Trigger Bean来控制执行时机。同时,还需要配置Quartz的属性文件来满足特定的应用需求。正确理解和...
在定时任务中,MyBatis常用于执行数据库相关的操作,如定期更新数据、清理过期记录等。我们可以将MyBatis的SqlSessionFactory注入到定时任务的bean中,通过SqlSession执行SQL语句。由于Spring的事务管理,这些数据库...
在"Spring2.5+Quartz定时任务简单例子web工程"中,我们可以看到这两个框架的结合使用,主要目标是实现基于 Web 应用的定时任务管理。以下将详细介绍这个项目中可能涉及的知识点: 1. **Spring 2.5**: - **依赖...
本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 首先,Quartz是一个开源的作业调度框架,它允许开发者创建、安排和执行定时...
总结起来,这个例子展示了如何在Spring中配置Quartz定时任务,包括定义任务细节、触发器以及调度器。通过这样的配置,你可以创建复杂的定时任务调度,满足不同业务需求。需要注意的是,实际项目中,为了更好地管理...
总的来说,“spring quartz定时任务demo”提供了一个直观的教程,帮助开发者理解如何在Spring项目中配置和使用Quartz进行定时任务的创建和管理。通过这个例子,你可以快速学习到如何定义Job,如何配置Trigger,以及...
在这两种方式中,Spring框架提供了自己的定时任务工具Spring Task,以及与专业定时任务框架Quartz集成的能力。 首先,对于Java自带的定时任务实现,我们可以使用java.util.Timer和java.util.TimerTask类。Timer类...
在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...
Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用中定义和执行定时任务。本实例将探讨如何在Spring框架中集成Quartz,创建并运行一个简单的定时任务。以下是你需要知道的关键知识点: 1. **Quartz...
通过以上步骤,你可以在Spring中成功配置并运行多个Quartz定时任务。记得在你的应用启动时启动Scheduler,以便Quartz能够按照预定的时间表执行任务。同时,你可以通过调整JobDetail和Trigger的属性,灵活地控制任务...
Spring Quartz定时任务jar包是Java开发中用于实现定时任务调度的一种解决方案。Quartz是一个开源的作业调度框架,它允许程序创建、调度和执行作业,而Spring框架则为Quartz提供了良好的整合,使得在Spring应用中配置...
2. 配置Scheduler:在Spring的配置文件中,使用`SchedulerFactoryBean`来初始化和配置Quartz Scheduler。可以设置如数据库存储、线程池大小等参数。 3. 创建Job类:定义一个实现了`org.quartz.Job`接口的类,这是...
2. 配置Quartz:在`application.properties`或`application.yml`中配置Quartz的基本属性,如线程池大小、启动延迟等。 3. 创建Job类:编写代表具体任务的Job类,继承`org.quartz.Job`接口,并实现`execute...