`

Quarts(定时)在Spring中应用实例

    博客分类:
  • java
阅读更多

最近项目要实现一个定时批量提交数据的功能,采用Spring的Quarts的技术来实现。

以下是使用实例:

首先:

编写自己的Service类和方法,这些省略咯。。主要讲怎么使用Quarts:

package com.wonders.hs.registration.healthevent.front.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Logger;
import javax.xml.datatype.DatatypeConfigurationException;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import com.wonders.hs.registration.healthevent.front.service.HealthEventFrontService;

public class QuartzJobFront extends QuartzJobBean {
	private HealthEventFrontService healthEventFrontService;
	private Logger log = Logger.getAnonymousLogger();
	
	@Override
	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		log.info("我是用quartz定时器打印出来的"+format.format(new Date()));
		try {
			long start = System.nanoTime();
			//批量注册前置表数据
			healthEventFrontService.registHealthEventFront();
			
			long end = System.nanoTime();
			log.info("总耗时:" + (end-start)/1000000000.0000);
		} catch (DatatypeConfigurationException e) {
			e.printStackTrace();
		}
	}
	
	public void setHealthEventFrontService(
			HealthEventFrontService healthEventFrontService) {
		this.healthEventFrontService = healthEventFrontService;
	}
	
}

 

在spring的配置文件中配置相关的Quarts信息:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	">
    <!-- =================================================================== -->
	<!-- Context Define                                                      -->
	<!-- =================================================================== -->
    <bean
		id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:hibernate.properties</value>
            </list>
        </property>
    </bean>
    <!-- =================================================================== -->
	<!-- Data Source Define (jdbc & jndi)                                    -->
	<!-- =================================================================== -->
    <bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${hibernate.connection.driver_class}" />
		<property name="url" value="${hibernate.connection.url}" />
		<property name="username" value="${hibernate.connection.username}" />
		<property name="password" value="${hibernate.connection.password}" />
		<property name="maxActive" value="100"/>
        <property name="maxWait" value="60000"/>
        <property name="maxIdle" value="10"/>
	</bean>
	<!-- JNDI Configuration -->
	<!--<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="java:jdbc/healthevent_front"/>
	</bean>-->
    
    <!-- =================================================================== -->
	<!-- SessionFactory(For Hibernate)/ManagerFactory(For JPA) Define        -->
	<!--  ONLY ONE OF THEM SHOULD BE USED                                    -->
	<!-- =================================================================== -->
    <bean
		id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        
        <property name="mappingDirectoryLocations">
            <list>
                <value>classpath:/com/wonders/hs/registration/healthevent/front/</value>
            </list>
        </property>
       
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">false</prop>
                <!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop> -->
            </props>
        </property>
    </bean>
    
    <!-- =================================================================== -->
	<!-- Transaction Define                                                  -->
	<!-- =================================================================== -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="remove*" propagation="REQUIRED"/>
            <tx:method name="del*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="edit*" propagation="REQUIRED"/>
            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="serviceMethods" expression="execution(* com.wonders.hs.registration.healthevent.front.*.service.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
    </aop:config>

	<jaxws:client id="eventClient"
        serviceClass="com.wonders.hs.registration.healthevent.ws.register.HealthEventRegistrationPortType"
        address="http://10.1.25.168:8081/healthevent/EventRegister" />
	
    <!--DAO-->
    <bean id="healthEventFrontDao" class="com.wonders.hs.registration.healthevent.front.dao.HealthEventFrontDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    
    <!--Service-->
    <bean id="healthEventFrontService" class="com.wonders.hs.registration.healthevent.front.service.impl.HealthEventFrontServiceImpl">
        <property name="healthEventFrontDao" ref="healthEventFrontDao"></property>
        <property name="port" ref="eventClient"></property>
    </bean>
    
    <!-- Quartz Job 定时操作 开始 -->
    <bean id="quartzJobFront" 
	    class="org.springframework.scheduling.quartz.JobDetailBean">
	  <property name="jobClass" value="com.wonders.hs.registration.healthevent.front.quartz.QuartzJobFront"/>
	  <property name="jobDataAsMap">
	  	<map>
	  		<entry key="healthEventFrontService">
	  			<ref bean="healthEventFrontService"/>
	  		</entry>
	  	</map>
	  </property>
	</bean>
	<bean id="cronEmailTrigger" 
	    class="org.springframework.scheduling.quartz.CronTriggerBean"> 
	  <property name="jobDetail" ref="quartzJobFront"/> 
	  <!--<property name="cronExpression" value="0 4 17 ? * *" />-->
	  <property name="cronExpression" value="2 * * * * ?" />
	</bean>
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
	  <property name="triggers"> 
	    <list> 
	      <ref bean="cronEmailTrigger"/> 
	    </list> 
	  </property> 
	</bean>
	<!-- Quartz Job 定时操作 结束 -->
	
</beans>

 

 其中<!-- Quartz Job 定时操作 开始 -->之后的代码是配置Quartz Job 定时操作的,嘿嘿。。

这样万事俱备,搞定啦。。。

另外,定时的时间设置貌似有点复杂,这里一并把他贴出来。。

附表 CronTrigger Expression( 来自http://quartz.sourceforge.net/javadoc/org/quartz/CronTrigger.html) 

Expression 
 Meaning 
 
"0 0 12 * * ?" 
 Fire at 12pm (noon) every day 
 
"0 15 10 ? * *" 
 Fire at 10:15am every day 
 
"0 15 10 * * ?" 
 Fire at 10:15am every day 
 
"0 15 10 * * ? *" 
 Fire at 10:15am every day 
 
"0 15 10 * * ? 2005" 
 Fire at 10:15am every day during the year 2005 
 
"0 * 14 * * ?" 
 Fire every minute starting at 2pm and ending at 2:59pm, every day 
 
"0 0/5 14 * * ?" 
 Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day 
 
"0 0/5 14,18 * * ?" 
 Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day 
 
"0 0-5 14 * * ?" 
 Fire every minute starting at 2pm and ending at 2:05pm, every day 
 
"0 10,44 14 ? 3 WED" 
 Fire at 2:10pm and at 2:44pm every Wednesday in the month of March. 
 
"0 15 10 ? * MON-FRI" 
 Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday 
 
"0 15 10 15 * ?" 
 Fire at 10:15am on the 15th day of every month 
 
"0 15 10 L * ?" 
 Fire at 10:15am on the last day of every month 
 
"0 15 10 ? * 6L" 
 Fire at 10:15am on the last Friday of every month 
 
"0 15 10 ? * 6L" 
 Fire at 10:15am on the last Friday of every month 
 
"0 15 10 ? * 6L 2002-2005" 
 Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005 
 
"0 15 10 ? * 6#3" 
 Fire at 10:15am on the third Friday of every month 
 

 顺便上传quarts的包和一个相关的spring的包。。。。

 

另外,这篇别人写的讲Quartz在Spring中集群 的,http://www.iteye.com/topic/486055,大家可以看看!

 

=========================================================================

 

          看完文章,请到 “品润茶业”购买 茶叶茶具和零食,切记哦!  
           地址: http://prtea.taobao.com                                        

 

=========================================================================

0
1
分享到:
评论

相关推荐

    quartz 在spring中使用服务定时执行的例子

    至此,我们就成功地在Spring中配置并使用了Quartz服务进行定时任务的执行。 总结起来,Quartz在Spring中的使用主要涉及以下步骤: 1. 添加Quartz和Spring相关依赖。 2. 创建Quartz配置类,初始化Scheduler。 3. ...

    spring-quarts_quartus_springboot_

    总的来说,"spring-quarts_quartus_springboot_"项目提供了一个实用的示例,展示了如何在Spring Boot应用中利用Quartz实现定时任务功能,这对于需要定期执行某些操作的应用场景(如数据同步、报表生成、清理任务等)...

    springboot整合quartz定时任务yml文件配置方式

    以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及涉及的Spring Cloud Alibaba、Dubbo和Nacos的相关知识。 首先,我们需要在`pom.xml`中引入相关的依赖。Spring Boot的`spring-boot-...

    关于spring中quartz的配置

    在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中...通过以上步骤,你就可以在Spring中成功配置并使用Quartz进行任务调度了。注意,实际应用中还需要根据具体需求调整配置和Job的实现。

    quarts使用例子

    Quartz是Java领域的一款强大的任务调度框架,常用于在企业级应用中实现定时任务的管理。这个"quarts使用例子"应该包含了一些关于如何在Quartz中配置、创建和执行任务的示例代码。让我们深入了解一下Quartz的核心概念...

    这是一些quarts包集

    这是quarts使用过程中要用到的各种包

    基于 springboot+mybatis_+shiro + redis+activiti+quarts+quart.zip

    标题 "基于 springboot+mybatis_+shiro + redis+activiti+quarts+quart.zip" 提供了一个关于综合应用多个技术栈...对于学习和理解这些技术如何协同工作,以及在实际项目中的应用,这个压缩包文件提供了一个很好的实例。

    基于 springboot+mybatis_+shiro + redis+activiti+quarts+quart76.zip

    【标题】"基于 springboot+mybatis_+shiro + redis+activiti+quarts+quart76.zip" 涵盖了多个关键的技术栈,这些技术在现代企业级应用开发中扮演着重要角色。下面将分别详细介绍这些技术及其在实际应用中的作用。 *...

    FPGA-QUARTS

    在使用 Quartus II 进行 FPGA 设计之前,首先需要创建一个新的项目。创建项目的步骤如下: 1. **启动 Quartus II**:打开 Quartus II 软件。 2. **新建项目向导**:通过菜单栏中的 `File -&gt; New Project Wizard` 来...

    基于springboot+mybatis+ mvc + activitiy+quarts+quartz 写的一个办公企业OA系统

    定时任务月末统计考勤状况 等功能 前端页面出致于:若依管理系统(https://github.com/WuJunJie521/RuoYiu) ##### 在线体验 地址:&lt;http://106.14.226.138:8880/OA/&gt; 管理员 账号:admin 密码:admin 领导...

    mif文件(quartus使用的)生成工具

    本文件为mif 文件生成工具 。1.支持常见波形(正弦波,方波波,梯形波,锯齿波,三角波)生成mif文件。2.支持图像生成mif文件。(支持任意格式和大小的图片文件)。3.如有定制需求(承接广告推广),可以联系我。

    定时调度框架JAR包quartz-2.0.2.jar

    定时调度框架quarts的JAR包,很好用

    quartz最简单程序 Work

    在提供的压缩包文件"quarts1"中,可能包含了示例代码或者配置文件,这些资源可以帮助进一步理解并实践上述的Quartz使用方式。学习和掌握Quartz能够让你在开发需要定时任务的应用时更加得心应手,无论是数据备份、...

    数字秒表数字秒表数字秒表

    A/D 接口在数字电路设计中非常重要,广泛应用于数据采集、信号处理等领域。 六、信号发生器 信号发生器是一种数字电路,用于产生不同的信号波形,例如递增斜波、三角波等。信号发生器在数字电路设计中非常重要,...

    Quarts-example.rar_VHDL/FPGA/Verilog_VHDL_

    【描述】"Quarts实例程序" 暗示我们将会看到一个或多个在Quarts环境下运行的实际程序或者设计案例。这些实例可能包括任务调度、中断处理、设备驱动等基本RTOS功能的实现,也可能包含特定于VHDL或Verilog的硬件加速器...

    Quartz开发指南

    - **应用服务器集成**:能够在应用服务器或Servlet容器中实例化,并支持参与XA事务处理。 - **远程访问**:可以独立运行并通过RMI进行访问。 - **集群支持**:支持实例化为具有负载均衡和容错能力的集群。 - **高级...

    quartus蜂鸣器例程

    在嵌入式系统设计中,蜂鸣器是一种常见的输出设备,用于发出声音信号,通常在硬件调试或者用户交互时使用。在本例程中,我们将关注如何使用Altera的Cyclone 1开发板来实现一个蜂鸣器控制的程序。Altera Quartus II是...

Global site tag (gtag.js) - Google Analytics