javascript
普通java程序怎样用cron_java – Spring cron vs普通cron?
我正在嘗試在遺留的Java / Spring / Hibernate項目中使用cron作業,所以我決定使用spring調度程序.
我希望myTask.doStuff在每個月的第一個星期日的12:00運行.
在我的application-context.xml中,我已經將我的任務調度程序配置為:
問題cron表達本身是:0 0 12? 1/1 SUN#1 *
和myTask是一個bean,它有一個名為doS??tuff的方法,從單元測試運行時可以很好地工作.
當我構建和部署時,我從spring獲得了一個bootime異常:
Caused by: java.lang.IllegalArgumentException: cron expression must consist of 6 fields (found 7 in 0 0 12 ? 1/1 SUN#1 *)
at org.springframework.scheduling.support.CronSequenceGenerator.parse(CronSequenceGenerator.java:233)
at org.springframework.scheduling.support.CronSequenceGenerator.(CronSequenceGenerator.java:81)
at org.springframework.scheduling.support.CronTrigger.(CronTrigger.java:54)
at org.springframework.scheduling.support.CronTrigger.(CronTrigger.java:44)
at org.springframework.scheduling.config.ScheduledTaskRegistrar.afterPropertiesSet(ScheduledTaskRegistrar.java:129)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
鑒于我第一次使用cron表達式,我的第一個假設是我做錯了,但我使用cronmaker進行了雙重檢查,它給了我相同的結果.
所有文檔都說:cron表達式是一個由六個或七個子表達式(字段)組成的字符串.1
盡管如此,我試圖敲掉第7個元素(年份)因為它不在任何示例中,并且得到了不同的錯誤消息:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.config.ScheduledTaskRegistrar#0': Invocation of init method failed; nested exception is java.lang.NumberFormatException: For input string: "0#1"
… org.springframework.scheduling是否支持其他所有類型的cron風格? the spring-specific documentation只是說’cron表達’.
如何在此上下文中使此cron表達式按預期工作?任何幫助都將不勝感激.
目前,我的解決方案是簡化這個表達式,以便每個星期日運行,并預先安排一些Java邏輯來計算它當月的哪個星期日,并查看它是否有效 – 但這樣做會破壞配置方法的目的和看起來像一個反模式.
解決方法:
Spring計劃任務的格式與cron表達式的格式不同.
它們不遵循與UNIX cron表達式相同的格式.
只有6個字段:秒,分鐘,小時,星期幾,月,星期.
星號(*)表示匹配任何.
* / X表示“每X”(見例子).
一周的數字日對我不起作用.此外,“MON-FRI”更容易閱讀.
以下是一些示例表達式:
“0 0 18 * * MON-FRI”表示每個工作日下午6:00.
“0 0 * / 1 * * *”表示每小時一小時.
“0 0 * / 8 * * *”表示每小時8小時.
“0 0 12 1 * *”表示每月第一天中午12:00.
標簽:java,spring,cron
來源: https://codeday.me/bug/20190926/1818477.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的普通java程序怎样用cron_java – Spring cron vs普通cron?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java构建内存池队列_池化技术(线程池
- 下一篇: java flux api,Spring