メール送信の調整に使用するがありjava.util.Timer
ます (ステータス メールが最近送信された場合は、今は送信せずにタイマー タスクを作成して、後で新しいステータスと共に送信します)。
私が望むのは、キューに入れられた電子メールが最終的に送信されるようにすることですが、キューに入れられていない場合はプログラムを正常にシャットダウンできるようにすることです。残念ながら、私はそれをどのように行うかを決めることができません:
タイマーをデフォルト (非デーモン) モードのままにしておくと、明示的にキャンセルされるまでプロセスが終了しなくなります。
タイマーをデーモン モードに設定すると、シャットダウンは許可されますが、キューに入れられたタスク (つまり、未送信の電子メール) は破棄されます。
私がこれまで行ってきたことは、電子メールが送信された後に明示的にタイマーをキャンセルし (そしてガベージ コレクションを行う)、将来の遅延電子メールのために必要になったときに新しいタイマーを再作成することです。これは不必要な解約のようです。
タイマーのデーモン状態を制御する方法はありますか? または、この遅延メール スキームを実現するタイマーの代替手段はありますか?
編集私の現在のソリューションは、厄介ですが、電子メール送信は「発射して忘れる」という利点があることに注意してください。電子メール送信者への呼び出しが行われると、Timer の非デーモン状態により、アプリケーションの他の部分がその間にシャットダウンを引き起こしたとしても、電子メールが送信されることが保証されます。これにより、タイマーを制御するための特別なアプリケーション シャットダウン コードが不要になります。