私の場合に適した解決策が見つかりました。 Main.javaで
:サービスで
@SpringBootApplication
@ConfigurationProperties
@EnableScheduling
public class Main {
@Bean
ThreadPoolTaskScheduler taskScheduler() {
return new ThreadPoolTaskScheduler();
}
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
。java(残りのコントローラから呼び出される):
@Service
public class Service {
private static final Logger log = LoggerFactory.getLogger(Service.class);
private final TaskScheduler scheduler;
@Autowired
public Service(TaskScheduler scheduler) {
this.scheduler = scheduler;
}
public void startTask(int inteval) {
scheduler.schedule(() -> log.info("Doing work"), triggerContext -> {
if (some_condition) {
ZonedDateTime now = ZonedDateTime.now();
return Date.from(now.plusSeconds(interval).toInstant());
} else {
// Stop the execution
return null;
}
});
}
}
この解決策は機能しますが、正しい方法であるとは確信できません。
下記のコメントをお寄せいただきありがとうございます。私が参考になった提案があれば、解決策を変更する可能性があります。
見た目はいいですが、アプリケーションの起動時にのみ実行されます。常にスケジュールされたタスクを開始して停止する必要がある –
は動的な理由を説明するために答えを更新しました – alexbt
解決策を見つけましたが、それは少し異なります。おそらく私のニーズに適しています。私は投票し、私はそれについてのフィードバックを得るために私自身の解決策を追加します。ありがとう! –