簡體   English   中英

Java Spring在特定時區的特定時間執行計划任務

[英]Java Spring do scheduled task at a specific time of specific timezone

我正在開發一個使用Spring和Hibernate的網站(該網站是關於股票交易)。

每天凌晨12點左右,我需要取消所有訂單。 目前我的解決方案是使用每小時運行的計划任務:

 <task:scheduled ref="ordersController" method="timeoutCancelAllOrders" fixed-delay="60*60*1000" />

然后在方法timeoutCancelAllOrders中,我得到當前時間並檢查,如果它是在晚上11點到12點之間然后執行任務

我看到它的方式,任務計划在我啟動服務器時啟動(我在Eclipse中使用Tomcat),但是當我在在線托管上部署它時(我正在使用Openshift),我不知道什么時候是啟動時間任務時間表。

我的問題是:

1:如何更自動地做到這一點? 有什么像myTask.startAt(12AM)嗎?

2:我住在越南,但服務器(Openshift)位於美國,所以這里是我的檢查方式:

        Date currentTime = new Date();
    DateFormat vnTime = new SimpleDateFormat("hh:mm:ss MM/dd/yyyy ");
    vnTime.setTimeZone(TimeZone.getTimeZone("Asia/Ho_Chi_Minh"));

    String vietnamCurrentTime = vnTime.format(currentTime);
    String currentHourInVietnam = vietnamCurrentTime.substring(0, 2);
    System.out.println(currentHourInVietnam);

    if(currentHourInVietnam.equals("00")){
        // DO MY TASK HERE
    }

這看起來很愚蠢。 我該如何改進我的代碼?

使用CRON規范

<task:scheduled ref="beanC" method="methodC" cron="0 0 0 * * ?"/>

每天午夜跑。

如果您改為注釋方法 ,則可以指定時區:

@Scheduled(cron="0 0 0 * * ?", zone="Asia/Ho_Chi_Minh")
public void methodC() {
    // code
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM