2

私の要件は、1 日に 1 回実行するタスクをスケジュールすることです。そのために、次のコードを使用しています。

public class setAutoReminder {
    EscalationDAO escalationDAO=new EscalationDAO();
    final  SendMail sendMail=new SendMail();
    public void fetch(){
        Date date=new Date();
        Timer timer = new Timer();


        timer.schedule(new TimerTask(){
            public void run(){
                int number=escalationDAO.getAutoReminder();
                System.out.println(number);
                if(number>0) {
                    sendMail.sendMail();
                }
            }
        },date, 1000000000);
    }
}

しかし、このコードは複数回実行されます。1 日に 1 回実行したいのですが、どうすればよいですか?

4

3 に答える 3

5

スケジュールされたジョブがあまりない場合は、すべての春の荷物を追加しないでください。複雑にしないでおく。

Date date=new Date();
Timer timer = new Timer();

timer.schedule(new TimerTask(){
     public void run(){
          System.out.println("Im Running..."+new Date());
     }
},date, 24*60*60*1000);//24*60*60*1000 add 24 hours delay between job executions.

これで問題は解決します。

-シヴァ

于 2012-04-25T07:00:10.903 に答える
4

Spring の場合 ( lombok を使用@Slf4j):

@Slf4j
@Component
public class SetAutoReminder 
{
    @Autowired
    private EscalationDAO escalationDAO;

    @Autowired
    private SendMail sendMail;

    @Scheduled(cron = "0 0 0 * * *") // everyday at midnight
    public void fetch(){
        final int number = escalationDAO.getAutoReminder();
        log.debug("Today number: {}", number);
        if (number>0) {
           sendMail.sendMail();
        }
    }
}

春のスケジューリングに関するチュートリアル: springsource ブログ

于 2012-04-25T06:37:10.120 に答える
0

Quartz Schedulerのようなスケジューラーが必要です

于 2012-04-25T06:31:16.670 に答える