2011-11-02 249 views
36

我有以下弹簧作业每30分钟后运行一次。请检查我的cron表达式,是否正确?每30分钟后弹簧cron表达

“0 0 0 * * 30”


下面是相关的春季配置文件中的完整的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> 
+4

我不帮助Spring选择不使用cron格式,但将其命名为'cronExpression' –

+0

@JosephLust - 这是非常真实的。另外在spring doc中,没有提到这种区别... spring cron也能提供秒提供,但正常的unix cron是基于分钟的......因为在unix man pages分钟是可以配置的最小时间单位。 – nanosoft

回答

36
<property name="cronExpression" value="0 0/30 * * * ?" /> 
93

按照Quartz-Scheduler Tutorial 它应该是value="0 0/30 * * * ?"

的cronExpression的场顺序是

1.Seconds

2.Minutes

3.Hours

4.Day的日

5.Month

6.星期几

7.Year(可选字段)

确保你至少有6个参数,否则你会得到一个错误(今年是可选)

+5

根据他们的文档,Quartz需要额外的字段。这将是'0 0/30 * * *?',我相信。一般的方法是正确的,虽然 –

+0

你似乎正确 –

+0

堆栈它是抛出异常 属性'cronExpression'抛出异常;嵌套异常是java.text.ParseException:意外的表达式结束。 –

29

图形,对石英硅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分钟可以说任一:

​​

您可以使用crontab.guru来检查crontab表达式(声明:我根本不涉及该页面,只是我觉得它非常有用)。不过,考虑到这个页面使用了UNIX中没有秒的cron风格,而Spring作为第一个字段。

+1

请注意,crontab.guru使用cron的Unix风格,它没有秒数。 Spring cron使用秒数,所以第一个字段是第二个字段。 –

+0

@GaneshKrishnan好点。在答案中添加了它。谢谢! – fedorqui

1
在Web应用程序的Java春天什么我

0 0/30 * * *工作

这将触发例如10:00然后10:30 AM等..

<?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> 

我不知道为什么,但这是工作在我的本地开发和生产,但其他的变化,如果我做了我必须小心,因为它可以在本地和开发上工作,但不能在生产上