Cron для запуска в 00:00 каждый день с использованием Spring Scheduler

Я пытаюсь каждый день выполнять метод, для которого я добавил планировщик с помощью Spring, но он не выполняется.

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="logDeletionTask" method="deleteExpiredLogs" cron="0 0 0 * * ?" />
</task:scheduled-tasks>
<task:scheduler pool-size="25" id="myScheduler"/>

person Deepak Tripathi    schedule 01.10.2015    source источник
comment
Возможно, вы запускали код на машине или сервере с другим часовым поясом.   -  person Khalid Abu El-Soud    schedule 09.10.2016


Ответы (1)


Для меня выражение cron, которое вы ищете, это: 0 0 12 * * ?

Вот рабочий образец для вас:

приложениеContext.xml:

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

    <bean id="logDeletionTask" class="task.Task" />

    <task:scheduled-tasks scheduler="myScheduler">
        <task:scheduled ref="logDeletionTask" method="deleteExpiredLogs" cron="0 0 12 * * ?" />
    </task:scheduled-tasks>

    <task:scheduler pool-size="25" id="myScheduler"/>
</beans>

Компонент задачи:

package task;

import java.util.Date;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Task {

    public static void main(String[] args) throws InterruptedException {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        while (true) {
            Thread.sleep(1000);
        }
    }

    public void deleteExpiredLogs() {
        System.out.println(new Date());
    }
}
person Alexandre Jacob    schedule 01.10.2015
comment
Я думаю, что это выражение запланирует работу на 12 часов дня. - person Deepak Tripathi; 01.10.2015
comment
Третья часть выражения — это час, который должен быть от 0 до 23 (0 — это 12 часов дня). Если вы хотите, чтобы задание запускалось в 12:00, правильное выражение — 0 0 0 * * ?, если вы хотите, чтобы оно запускалось в 12:00, — 0 0 12 * * ? - person Alexandre Jacob; 01.10.2015
comment
В вашем ответе что-то не так, если 0 соответствует 12 часам дня, поэтому 1 соответствует 13:00, а 13 соответствует 1:00, и это не может быть принято кем-либо. - person Khalid Abu El-Soud; 09.10.2016