延迟任务:调度程序在春季3首次执行

2022-09-04 20:45:47

我有一个简单的应用程序,使用Spring 3进行依赖注入。我有一个JFrame供用户查看,还有一些后台任务用于与后端服务器同步和本地数据库维护。

这是我的应用程序上下文的相关部分:

<task:scheduler id="scheduler" pool-size="1"/>
<task:scheduled-tasks scheduler="scheduler">
    <task:scheduled ref="synchronizer" method="incrementalSync" fixed-delay="600000"/>
    ... more tasks ...
</task:scheduled-tasks>

<bean id="mainFrame" class="nl.gdries.myapp.client.ui.MainFrame">
    ... properties and such ...
</bean>

当我启动此应用程序Context时,计划程序立即开始执行后台任务,即使我的UI正在加载。由于第一个任务在开始时相当繁重,我希望它在开始执行之前等待UI完全加载和显示。

有谁知道如何告诉Spring将计划任务的执行推迟到我选择的那一刻?


答案 1

这似乎被排除在豆类定义之外,这是我上周才注意到的。<task:scheduled>

但是,请记住,定义只是快捷方式,您始终可以使用显式方法,方法是使用嵌套的 Bean 定义一个 。这为您提供了更精细的控制,包括 .<task:...>ScheduledExecutorFactoryBeanScheduledExecutorTaskinitialDelay


答案 2

我遇到了同样的问题,并回到了TimerTask,因为它在25.7.1点中 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html

<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <!--  wait 25 seconds before starting repeated execution --> 
    <property name="delay" value="25000" />
    <!--  run every 50 seconds -->
    <property name="period" value="50000" />
    <property name="timerTask" ref="task" />
</bean>

<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
    <property name="scheduledTimerTasks">
        <list>
            <ref bean="scheduledTask" />
        </list>
    </property>
</bean>

我希望在春季 3.1 中将初始Delay属性,因为在春季3.0中TimerFactoryBean已被弃用。你可以为这个问题投票:jira.springframework.org/browse/SPR-7022<task:scheduled>


推荐