web-dev-qa-db-ja.com

30分ごとのSpring cron式

30分ごとに実行する次のSpringジョブがあります。私のcron表現を確認してください、それは正しいですか?

「0 0 0 * * 30」


関連するSpring configurationファイルからの完全なcronジョブ定義は次のとおりです。

<bean id="autoWeblogPingTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="jobDetailForWeblogPing"/>
    <!-- run every 35 minutes -->
    <property name="cronExpression" value="0 0 0 * * 30" />
</bean>
52
d-man
<property name="cronExpression" value="0 0/30 * * * ?" />
45
d-man

Quartz-Scheduler Tutorial によると、value="0 0/30 * * * ?"になります

CronExpressionのフィールド順序は

1.秒

2.分

3時間

4.月の日

5ヶ月

6.曜日

7.Year(オプションのフィールド)

少なくとも6つのパラメーターがあることを確認してください。そうしないと、エラーが発生します(年はオプションです)

114
stacker

グラフィカルに、Quarzのcron構文は( source )です:

+-------------------- second (0 - 59)
|  +----------------- minute (0 - 59)
|  |  +-------------- hour (0 - 23)
|  |  |  +----------- day of month (1 - 31)
|  |  |  |  +-------- month (1 - 12)
|  |  |  |  |  +----- day of week (0 - 6) (Sunday=0 or 7)
|  |  |  |  |  |  +-- year [optional]
|  |  |  |  |  |  |
*  *  *  *  *  *  * command to be executed 

したがって、30分ごとにコマンドを実行する場合は、次のいずれかを言うことができます。

0 0/30 * * * * ?
0 0,30 * * * * ?

次のいずれかを使用して、crontab式を確認できます。

  • crontab.gur —(免責事項:私はそのページとはまったく関係がありませんが、非常に便利だと感じているだけです)。このページでは、秒のないUNIXスタイルのcronを使用しますが、Springは最初のフィールドとして使用します。
  • Cron Expression Generator&Explainer-Quartz — cronフォーマッター、秒も許可。
54
fedorqui

webアプリでJava spring

cron="0 0/30 * * * ?"

これは、たとえば午前10時から午前10時30分などにトリガーされます。

<?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:beans="http://www.springframework.org/schema/beans"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/task 
    http://www.springframework.org/schema/task/spring-task.xsd">

    <beans profile="cron">
        <bean id="executorService" class="Java.util.concurrent.Executors" factory-method="newFixedThreadPool">
            <beans:constructor-arg value="5" />
        </bean>

        <task:executor id="threadPoolTaskExecutor" pool-size="5" />
        <task:annotation-driven executor="executorService" />

        <beans:bean id="expireCronJob" class="com.cron.ExpireCron"/>

        <task:scheduler id="serverScheduler" pool-size="5"/>
        <task:scheduled-tasks scheduler="serverScheduler">
            <task:scheduled ref="expireCronJob" method="runTask" cron="0 0/30 * * * ?"/> <!-- every thirty minute -->
        </task:scheduled-tasks>

    </beans>

</beans>

理由はわかりませんが、これは私のローカル開発とプロダクションに取り組んでいますが、他の変更は私が行った場合、ローカルと開発では動作するがプロダクションではないため注意する必要があります

7
shareef

誰かが@Sceduledを使用している場合、これはあなたのために働くかもしれません。

@Scheduled(cron = "${name-of-the-cron:0 0/30 * * * ?}")

これは私のために働いた。

0
Shaul Hameed