quartz重复执行的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

quartz重复执行的问题

2016-05-31 15:27:53 4622 1

最近用到quartz做集群,需求每隔一段时间执行一次任务。
发现在配置较短的时间间隔,比如15秒钟执行一次时,会出现,服务器启动会有多个线程(不等,有时候2个,多的时候4个,quartz线程数目用的默认的10个)重复执行该任务。
控制台信息如下:
screenshot
而当我配置成1min执行一次的时候,就没有问题,不会重发执行。主要的配置文件如下,求解

<bean id="autoRepeatRequestTask"
        class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass">
            <value>com..job.AutoRequestRepeatJob</value>
        </property>
        <property name="durability" value="true" />
        <property name="requestsRecovery" value="true" />
    </bean>
    <!-- 定义触发时间 -->
    <bean id="autoRepeatRequestDoTime"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref bean="autoRepeatRequestTask" />
        </property>
        <!-- cron表达式 -->
        <property name="cronExpression">
            <value>0 * * * * ?</value>
            <!--每分钟执行一次 -->
        </property>
    </bean>
    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
    <bean id="startQuartz" lazy-init="false" autowire="no"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
        destroy-method="destroy">
        <property name="configLocation" value="classpath:quartz.properties" />
        <property name="triggers">
            <list>
                <ref bean="autoRepeatRequestDoTime" />
            </list>
        </property>
        <property name="startupDelay" value="10" />
        <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
    </bean>

执行的任务类:

@PersistJobDataAfterExecution
@DisallowConcurrentExecution // 不允许并发执行
public class AutoRequestRepeatJob extends QuartzJobBean {
    private static final Logger LOGGER = LoggerFactory.getLogger(AutoRequestRepeatJob.class);

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println(Thread.currentThread().getName()+"------初始化了"+DateTimeUtils.getNowHHmmss());
        RequestRepeatService requestRepeatService = getApplicationContext(context).getBean(RequestRepeatService.class);
        requestRepeatService.autoRepeatRequest();

    }

    private ApplicationContext getApplicationContext(final JobExecutionContext jobexecutioncontext) {
        try {
            return (ApplicationContext) jobexecutioncontext.getScheduler().getContext().get("applicationContextKey");
        } catch (SchedulerException e) {
            LOGGER.error("jobexecutioncontext.getScheduler().getContext() error!", e);
            throw new RuntimeException(e);
        }
    }
}
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:22:04

    quartz集群配置

     #==============================================================    
    #Configure Main Scheduler Properties    
    #==============================================================     
    org.quartz.scheduler.instanceId=AUTO
    org.quartz.scheduler.instanceName=AUTO_REPEAT_REQUEST
    #============================================================================  
    # Configure JobStore    
    #============================================================================  
    org.quartz.jobStore.isClustered=true
    org.quartz.jobStore.clusterCheckinInterval=15000
    org.quartz.jobStore.misfireThreshold = 60000 
    org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
    org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate  
    org.quartz.jobStore.tablePrefix = QRTZ_  
    org.quartz.jobStore.useProperties = false
    org.quartz.jobStore.dataSource = myDS
    #============================================================================  
    # Configure ThreadPool    
    #============================================================================ 
    org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount=10
    org.quartz.threadPool.threadPriority=5
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true  
    #============================================================================     
    # Configure Datasources       
    0 0
相关问答

1

回答

ossutil 出现 skip 情况怎么办?

2021-03-11 10:12:31 402浏览量 回答数 1

1

回答

如何监控Quartz的job执行状态:运行中,暂停中,等待中?:报错 

2020-06-08 16:16:00 755浏览量 回答数 1

1

回答

CvCapture* pCapture = cvCreateCameraCapture(-1):报错

2020-06-05 23:11:14 462浏览量 回答数 1

1

回答

开源框架Quartz有哪些缺陷和不足?

2020-04-23 16:21:41 1035浏览量 回答数 1

1

回答

大佬们,Flink生产环境部署 一般用什么模式多些 standalone、yarn还是kuberne

2019-12-09 14:03:39 1123浏览量 回答数 1

0

回答

网站N多会员和N多空间的权限管理

2019-07-12 15:00:11 946浏览量 回答数 0

1

回答

spring quartz多个任务问题

2016-03-16 14:05:09 1572浏览量 回答数 1

1

回答

Quartz Job的事务

2016-03-12 17:50:29 3538浏览量 回答数 1

2

回答

spring中的quartz不要并发执行 要设置哪呢

2016-03-16 15:42:41 2671浏览量 回答数 2

1

回答

struct {}a,*p 的问题

2016-03-09 10:19:36 3318浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载