`
hbxflihua
  • 浏览: 667854 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring的定时监听使用例

 
阅读更多

需求如下:

客户档案录入一个月后,还没有签订合同的,需要提示业务经理,看是否需要更换业务员。是否更换取决于业务经理本人。

定时监听器的功能:每天定时清除已过期的客户档案对应的业务员。

 

做法如下:

springquartz实现定时作业。操作前需要准备一个jar文件和一个xml文件:

quartz-all-1.6.0.jarquartz.properties

第一步:查询出客户档案中已过期的客户档案。

以下是客户档案映射文件的查询语句:查询出未签订合同并已超过一个月的客户

<!-- 查询已过期客户列表 -->
  <select id="queryOutOfDateCustomerList" resultMap="abatorgenerated_CustomerrecordtblResult" >
  		<![CDATA[
		 select *  from CUSTOMER_RECORD_TBL cus where (
			select count(*) from contract_tbl con where cus.customer_id=con.customer_id) =0
		and cus.input_date<=getdate()-30
		]]>
  </select>

 

第二步:在Service中添加定时方法:

/**
     * 定时去除过期客户档案业务员
     * @throws Exception
     */
    public void updateOutOfDateTimer()throws Exception{
    	try {
    		 String startTimerOnCustomerRecord= Toolkit.getInstance().getSingleConfig("startTimerOnCustomerRecord");
             if("no".equalsIgnoreCase(startTimerOnCustomerRecord)){

	    		System.out.println("【"+new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date())+"】,定时更改开始");
	    		//查询出已过期的客户
	    		List<Customerrecordtbl> customers=customerrecordtblDAO.queryOutOfDateCustomerList();
	    		for(Customerrecordtbl customer:customers){
	    			customer.setSalesman("");//除去业务员
	    		}
	    		//执行批量修改
	    		customerrecordtblDAO.updateProcessBatch(customers);
	    		System.out.println("【"+new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date())+"】,定时更改结束!");
             }
		} catch (SQLException e) {
			logger.error("定时去除过期客户档案对应业务员:" + e.getMessage(), e);
			throw new CustomerRecordException("定时去除过期客户档案对应业务员:",e);
		}
    }


提示:该方法不必在接口中声明。

上面的方法中使用了配置文件的开关,大可不必去理会。内容如下:

String startTimerOnCustomerRecord= Toolkit.getInstance().getSingleConfig("startTimerOnCustomerRecord");
             if("no".equalsIgnoreCase(startTimerOnCustomerRecord))

 

这里还用了iBATIS的批量修改的方法,具体内容如下:

/**
     * 批量修改客户档案信息
     * @param list
     * @throws SQLException
     */
    public void updateProcessBatch(final List<Customerrecordtbl> list) throws SQLException {

		this.getSqlMapClientTemplate().execute(new SqlMapClientCallback(){
		    public Object doInSqlMapClient(SqlMapExecutor executor)
		            throws SQLException {
		    executor.startBatch();
		    int batch = 0;
		    for(Customerrecordtbl vo:list){
		    //调用获取sequence的方法。如果没有的话就去掉这行代码。
		    //inCodeVO.setInside_Number_Id(getNextId());
		    //参数1为:ibatis中需要执行的语句的id		    executor.update("CUSTOMER_RECORD_TBL.abatorgenerated_updateByPrimaryKeySelective", vo);
		    batch++;
		    //每200条批量提交一次
		    if(batch==200){
		    executor.executeBatch();
		    batch = 0;
		    }
		    }
		    executor.executeBatch();
		    return null;
		    }
		    });
	}

 

第三步:在spring配置文件中配置


 <bean id="methodInvokingJobWips" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     		<property name="targetObject">
     			<ref bean="customerRecordMan"/>//Service注入类
     		</property>
          	<property name="targetMethod">
          		<value>updateOutOfDateTimer</value>//定时修改的方法
          	</property>
    </bean>
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    		<property name="jobDetail">
    			<ref bean="methodInvokingJobWips"/>
    		</property>
    		<property name="cronExpression">
    			<value>0 0/1 8-22 * * ?</value>//cron表达式
    		</property>
    </bean>
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
			<property name="triggers">
				<list><ref local="cronTrigger"/></list>
			</property>
	</bean>

 要注意:定时器在每次重启服务时,均会调用。其次再根据上面红色部分的cron表达式设置定时时间。

 

0
0
分享到:
评论

相关推荐

    Spring定时任务

    要使用Spring定时任务,首先需要在配置类上启用定时任务支持,通过添加`@EnableScheduling`注解。这会启动一个后台任务调度器,定期检查是否有待执行的任务。 3. **使用@Scheduled注解** `@Scheduled`注解可以...

    Spring监听器及定时任务实现方法详解

    通过示例代码,我们将展示如何使用Spring监听器和定时任务来实现批处理任务的执行。 Spring监听器 在Spring框架中,监听器是指实现ServletContextListener接口的类,用于监听ServletContext的生命周期事件。监听器...

    spring boot文件夹文件监听程序

    - 在Spring Boot应用中,我们可以创建一个`@Component`,并使用`@EventListener`注解来监听特定事件,或者自定义一个`ApplicationListener`监听`ApplicationReadyEvent`,在应用启动后开始监听文件夹。 - 使用`@...

    Spring定时任务的简单例子

    Spring定时任务支持更多的功能,比如任务执行的并发控制、任务执行的监听器、以及使用Quartz等第三方调度库进行更复杂的任务调度。 总结,Spring定时任务为开发者提供了方便的API和注解,使我们可以轻松地在Java...

    Spring3.0定时任务简单实例web工程

    在传统的Servlet 2.x环境中,可以使用`ServletContextListener`监听器,在`contextInitialized`方法中启动任务调度。而在Servlet 3.0及以上版本,可以利用`@WebServlet`或`@WebListener`注解。例如: ```java @Web...

    spring动态配置定时任务

    总结起来,Spring动态配置定时任务的关键在于:1) 使用`@Scheduled`或`TaskScheduler`来调度任务;2) 将定时任务配置存储在数据库中,以便于管理和动态更新;3) 设计服务类以响应数据库的变更,及时调整任务的执行...

    java web使用监听器实现定时周期性执行任务demo

    4. **自定义功能**:在提供的描述中提到,这个demo只实现了定时监听和周期性执行任务的基础功能,实际的应用场景可能需要添加邮件发送、文件删除等自定义任务。这只需要在`Runnable`任务中添加相应逻辑即可。例如,...

    Spring 框架自带定时任务和Quartz定时任务

    Spring Task是在Spring 3.0之后引入的,它使用起来相对简单,支持线程池,可以高效处理不同的定时任务。Spring Task可以通过注解或XML配置文件来配置任务。如果使用注解的方式,仅需要在方法上加上@Scheduled注解,...

    Spring提供的三种定时任务机制及其比较

    在Spring框架中,有三种主要的定时任务机制可供开发者选择,分别是基于Quartz的定时机制、Spring自己的`@Scheduled`注解以及Java的`java.util.Timer`类。在这篇文章中,我们将重点讨论基于Quartz的定时机制,因为它...

    spring定时非常详细,有例子,超具体,需要的下载

    本资源包含了一份关于Spring定时任务的详细教程,具有实例和具体操作步骤,适合需要深入了解和使用Spring定时功能的开发者。 Spring定时任务主要依赖于`Spring Task`模块,它提供了`@Scheduled`注解和`Task...

    spring定时任务

    Spring定时任务是Spring框架提供的一种强大的任务调度机制,它允许开发者在应用中安排周期性任务的执行,无需依赖外部的调度服务如Quartz或cron。自Spring 3.0版本开始,Spring引入了`@Scheduled`注解和`Task...

    SpringQuartz的使用文档

    Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...

    Spring定时器配置详解

    为了使Spring定时任务在Web应用启动时自动加载和运行,需要在`web.xml`中添加相应的初始化参数和监听器: ```xml &lt;!-- 设置Spring上下文配置文件的位置 --&gt; &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;/...

    Spring @Scheduled定时任务动态修改cron参数

    Spring框架是Java开发中广泛使用的轻量级框架,它提供了丰富的功能,其中之一就是对定时任务的支持。`@Scheduled`注解是Spring Framework中用于创建定时任务的重要工具,它允许开发者在不重启应用的情况下,实现定时...

    Java课程实验 Spring Boot 任务管理(源代码+实验报告)

    1.在Spring Boot中,你可以使用@Scheduled注解来创建定时任务。将@Scheduled注解与方法一起使用,指定任务执行的时间表达式。 2.使用Spring的TaskScheduler: Spring提供了TaskScheduler接口和相关实现,用于任务...

    spring的quartz使用实例

    Spring提供了`SchedulerAwareRunnable`,可以用于监听Scheduler的状态。Quartz自身也提供了Web管理界面(如`QuartzAdmin`),可以在线查看和管理Job和Trigger。 8. **异常处理和重试策略** 可以通过实现`org....

    在spring利用javamail,quartz定时发送邮件

    通过上述步骤,我们不仅了解了如何在Spring环境中结合JavaMail和Quartz实现定时邮件发送,而且还深入探索了Spring框架如何简化JavaMail API的使用,以及Quartz如何提供灵活的定时任务调度能力。这种技术组合为Web...

    Spring mvc + Mybatis + quartz + swagger 定时任务管理[新增、编辑、删除、修改]

    Quartz是Java领域广泛使用的定时任务库,它支持复杂的调度策略,如周期性执行、一次性任务等。在这个系统中,Quartz作为核心的定时任务引擎,允许管理员动态创建、编辑、删除和修改定时任务。所有的任务配置信息,...

    Spring的定时调度--Quartz

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Spring的定时调度功能则为企业级应用提供了强大的任务...了解并熟练掌握Spring的定时调度和Quartz的使用,对提升企业级应用的自动化水平具有重要意义。

Global site tag (gtag.js) - Google Analytics