`

spring动态定时器

阅读更多
<!-- 被执行类 -->
<bean id="autoBillQuartz" class="com.util.task.AutoBillQuartz" init-method="initTime">
    <property name="scheduler" ref="systemDescsionScheduler" />
    <property name="p2pCreditAppInfoLogic" ref="p2pCreditAppInfoLogic"></property>
</bean>

<!-- 将autoQuartzJob注入到job中 -->
<bean id="autoQuartzJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="autoBillQuartz" />
    <property name="targetMethod" value="doSomething" />
    <property name="concurrent" value="false" />
</bean>

<!-- 将job注入到定时触发器 默认5分钟一次-->
<bean id="autoBillTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
    <property name="jobDetail" ref="autoQuartzJob" />  
    <property name="cronExpression">  
        <value>0 0/5 * * * ?</value>   
  </property>  
</bean>
<!-- 系统定时任务工厂类 -->
<bean id="systemDescsionScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="autoBillTrigger"/>
</list>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.threadCount">4</prop>
</props>
</property>
</bean>
package com.util.task;


import java.text.ParseException;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.scheduling.quartz.CronTriggerBean;
import com.crfchina.aps.foundation.common.common.LogUtils;
import com.crfchina.p2p.app.entity.P2pCreditAssignSize;
import com.crfchina.p2p.app.service.logic.P2pCreditAppInfoLogicInterface;

/**
* 处理动态自动分单
*
* @author xlin
*
*/
public class AutoBillQuartz {
private Scheduler scheduler;
private P2pCreditAppInfoLogicInterface p2pCreditAppInfoLogic;
private static CronTriggerBean trigger = null;
private static boolean auto;//开关
private Log log = LogUtils.getLog(AutoBillQuartz.class.getName());

public void initTime() {
try {
log.info("审核分单初始化!");
P2pCreditAssignSize cas = p2pCreditAppInfoLogic
.queryP2pCreditAssignSize();
if (cas != null) {
//获取数据库分单时间
String allotTime = cas.getAllotTime();
if (!StringUtils.isEmpty(allotTime)) {
resetJob(allotTime);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("审核分单初始化异常!",e);
}
}

/**
* 获取时间
*
* @param allotTime
* @return
*/
private String getAllotTime(String allotTime) {
if (allotTime.equals("1")) {
// 每五分钟一次
allotTime = "0 0/5 * * * ?";
} else if (allotTime.equals("2")) {
// 每10分钟一次
allotTime = "0 0/10 * * * ?";
} else if (allotTime.equals("3")) {
// 每20分钟一次
allotTime = "0 0/20 * * * ?";
} else if(allotTime.equals("4")){
allotTime="4";
}else {
allotTime = "0 0/5 * * * ?";
}
return allotTime;
}

/**
* 执行定时任务
*/
public void doSomething() {
log.info("审核分单!");
try {
p2pCreditAppInfoLogic.morningAutoAssignCreditAppInfo();
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("自动分单异常!"+e.getMessage(), e);
e.printStackTrace();
}
}

/**
* 设置定时任务时间
*
* @param cronExpression
*/
public void resetJob(String cronExpression) {
try {
if (trigger == null) {
trigger = (CronTriggerBean) scheduler.getTrigger("autoBillTrigger",
Scheduler.DEFAULT_GROUP);
}
cronExpression = getAllotTime(cronExpression);
String originConExpression = trigger.getCronExpression();
// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
if(cronExpression.equals("4")){
stopTrigger();
}else{
startTrigger(cronExpression);
if (!originConExpression.equalsIgnoreCase(cronExpression)) {
trigger.setCronExpression(cronExpression);
scheduler.rescheduleJob("autoBillTrigger", Scheduler.DEFAULT_GROUP,
trigger);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("审核分单设置频率失败!",e);
throw new RuntimeException("审核分单设置频率失败!");

}

}

/**
* 关闭定时
* @throws SchedulerException
*/
private void stopTrigger() throws SchedulerException {
scheduler.pauseJob("autoBillTrigger",Scheduler.DEFAULT_GROUP);
scheduler.pauseTrigger("autoBillTrigger", Scheduler.DEFAULT_GROUP);
auto=true;
}

/**
* 开启定时
* @param cronExpression
* @throws ParseException
* @throws SchedulerException
*/
private void startTrigger(String cronExpression) throws ParseException,
SchedulerException {
if(auto){
trigger.setCronExpression(cronExpression);
scheduler.rescheduleJob("autoBillTrigger", Scheduler.DEFAULT_GROUP,trigger);
}
}

public Scheduler getScheduler() {
return scheduler;
}

public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}

public P2pCreditAppInfoLogicInterface getP2pCreditAppInfoLogic() {
return p2pCreditAppInfoLogic;
}

public void setP2pCreditAppInfoLogic(
P2pCreditAppInfoLogicInterface p2pCreditAppInfoLogic) {
this.p2pCreditAppInfoLogic = p2pCreditAppInfoLogic;
}

}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring动态定时器

    ### Spring动态定时器详解 #### 一、动态定时任务概念 动态定时任务,是指由用户或系统根据实际需求动态设定的定时任务。这类任务的触发时间并非固定不变,而是可以根据实时情况灵活调整。传统上,配置定时任务...

    spring动态定时器封装

    本文将深入探讨如何在Spring框架中进行动态定时器的封装,结合标签"源码"和"工具",我们将探讨Spring与Quartz库的整合,以及如何通过源码理解其实现机制。 首先,让我们了解一下Spring的定时任务支持。Spring提供了...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...

    spring定时器 spring定时器

    Spring定时器还支持动态修改任务执行计划,例如通过`ThreadPoolTaskScheduler`或`ConcurrentTaskScheduler`来调整线程池大小,控制并发执行的任务数量。此外,我们还可以通过`@Scheduled`注解的`initialDelay`属性来...

    spring设置动态定时任务

    【Spring 动态定时任务详解】 在 Spring 中,动态定时任务是一种允许用户在不重启服务的情况下,自由调整任务执行时间的机制。这种功能通常通过集成第三方定时任务框架,如 Quartz,来实现。Quartz 是一个功能强大...

    Spring Quartz 定时器示例(Web工程版)

    Spring Quartz 定时器示例(Web工程版),欢迎下载。

    定时器(spring管理),但是不是spring的定时器

    在网上找了很多定时器的实现,主要有2种:一是继承java.util.TimerTask,一种是使用Quartz,我开始选用了Quartz,但是Common-collection.jar出了问题,后来就都不用了,自己写了一个普通类,用spring的AOP对方法进行拦截,...

    spring 定时器的两种实现

    在Spring框架中,有两种主要的方法来实现定时任务:Spring自带的`@Scheduled`注解和引入第三方库Quartz。这两种方法都可以帮助开发者在特定的时间点执行任务,为应用程序添加计划任务的能力。 首先,我们来看看使用...

    spring实现定时器

    ### Spring 实现定时器 在Java开发领域,Spring框架因其高度灵活、强大的功能以及广泛的社区支持而备受青睐。其中,Spring框架提供了多种实现定时任务的方法,包括但不限于使用`...

    Spring的定时器动态修改参数cron的值

    本篇文章将深入探讨如何动态地修改Spring定时器的cron表达式,以便任务能够根据业务需求进行实时调整。 首先,我们需要了解Spring中的定时任务是如何配置的。通常,我们会在Spring的配置文件中使用`@...

    java 定时器 spring 定时器

    Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...

    spring和java定时器

    首先,我们来看Spring定时器。Spring使用的是Quartz库来实现定时任务管理。在给出的例子中,可以看到配置文件中定义了几个关键的bean: 1. `zhang`:这是被调度的任务bean,它包含了实际执行定时任务的方法。在这个...

    spring的定时器设置

    在本主题"spring的定时器设置"中,我们将深入探讨Spring如何配置定时任务,主要关注2.x和3.x版本的区别。 一、Spring 2.x 定时任务 在Spring 2.x中,定时任务主要是通过`org.springframework.scheduling.timer`包...

    web spring 定时器

    Spring的定时器功能使得开发者能够轻松地实现计划性的任务,例如数据清理、日志备份或者发送邮件等周期性操作。本文将深入探讨Spring中的定时器特性,以及如何在Java环境中结合Quartz库进行更高级的定时任务整合。 ...

    spring定时器spring定时器spring定时器

    spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器

    Spring Quartz定时器

    Spring Quartz定时器 Spring Quartz定时器 Spring Quartz定时器 Spring Quartz定时器

    spring2.5 定时器任务

    ### Spring2.5定时器任务实现机制与配置详解 #### 一、Spring2.5定时器任务概述 在Spring框架2.5版本中,提供了强大的定时任务管理功能,支持多种方式来实现定时任务的调度与执行。这为开发人员提供了一个灵活且...

    springAop与spring定时器

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...

    spring定时器简单的demo

    Spring提供了Spring Task模块来实现定时任务,也就是我们常说的Spring定时器。这个"spring定时器简单的demo"应该包含了一个使用Spring Task实现简单定时任务的例子。 首先,Spring Task的配置通常在`...

Global site tag (gtag.js) - Google Analytics