2016-04-23 4 views
-1

下記の更新コードのQuartzタイマーサービスが必要です。例えば、6か月ごとに更新するQuartzタイマーサービスを作成するには?

//dataTypes are date only 

List<User> allDbUsers=userRepository.findAll(); 

Date currDate=new Date(); 
final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24; 
for(User user:allDbUsers) 
{ 
    Date creationDate=user.getCreationDate(); 
    String firstKey=user.getFirstKey(); 

    Long diffInDays=(currDate.getTime()-creationDate.getTime())/DAY_IN_MILLIS; 
    if(diffInDays==180) 
    { 
     user.setSecondKey(firstKey); 
     user.setFirstKey("aH&#KK"); 
     userRepository.saveAndFlush(user); 

    } 
} 
+0

本当にスケジューラを使用してもよろしいですか?今から180日後にジョブが実行されるようにスケジュールを設定しても、アプリが1か月に1回、たとえば1か月間に再開されるとどうなるか推測してみてください。 – kryger

+0

@kryger、彼のコードは実行スケジューラ用ではなく、job.excecuteメソッドのコードです(どのジョブが必要ですか)。スケジューラは、夜中にジョブが再び呼び出されると、サーバーが停止すると問題が発生するでしょう – HAYMbl4

答えて

0

あなたは日付の間のビューデフ用Calendarを使用することができます:半年ごとは、すべてのユーザーのキーは、そのcreationDateに応じて更新する必要があります

Calendar currentDate = Calendar.getInstance(); 
    Calendar sixMonthAfterCreation; 

    for (User user : allDbUsers) { 
     sixMonthAfterCreation = Calendar.getInstance() 
     sixMonthAfterCreation.setTime(user.getCreationDate()); 
     sixMonthAfterCreation.add(Calendar.MONTH, 6); 

     String firstKey = user.getFirstKey(); 

     if (currentDate.after(sixMonthAfterCreation)) { 
      user.setSecondKey(firstKey); 
      user.setFirstKey("aH&#KK"); 
      userRepository.saveAndFlush(user); 
     } 
    } 

をかは、Java 8を使用する場合作成日をLocalDateに変換して差分を表示できます。

私があなたを理解していれば、Quartz Schedulerを使いたいと思っています。私はそれを使用しませんでしたが、org.quartz.Jobを実装し、executeメソッドをオーバーライドし、その中のユーザーを更新するコードを記述する必要があると思います。クォーツスケジューラの詳細については

は実行スケジューラのためのthis question

一つの明確化、このコードではありませんを見て、それは(何の仕事をしなければならない)方法job.excecuteのためにコーディングします。スケジューラは毎晩(たとえば)毎晩実行する必要があります。その後、すべての深夜はexecuteメソッドと呼ばれ、すべてのユーザーが更新を見つけて行います。

+0

ちょっとOleg Naumovあなたの時間のためにトンをありがとう私はJava 8を使用していますが、私は正確に同じコードが必要Timer Quartzサービスを使用した(日付、秒の)実行タイマーサービスのためにこのコードをどのように移行できますか?私はspring 4.2アノテーションを使用しています –

+0

@DK私は私の答えを更新しました。もしあなたが役に立たなかったらごめんなさい – HAYMbl4

+0

こんにちはOleg Naumovさん、私の前のコードでは正確な時刻が得られていなかったので、本当に助かりました –

関連する問題