SpringBootは非同期タスクと時限タスクをどのように実装しますか?

フロントに書かれている:2020年のインタビューに必要なJavaバックエンドの高度なインタビューの質問。レビューガイドはGithubに要約されています。内容は写真とテキストで詳細に説明されています。学ぶ必要がある友達は主演できます!
GitHubアドレス:https//github.com/abel-max/Java-Study-Note/tree/master

(1)非同期タスク非同期タスク
の要件は、実際の開発シナリオでよく発生します。非同期を実現するためのマルチスレッドなど、Javaで非同期を実現する方法は多数あります。SpringBootでは、非同期タスクの実現には2つの注釈を追加するだけで済みます。現在のクラスに@Asyncアノテーションを追加し、クラスを開始するために@EnableAsyncを追加します

サービスAsynServiceを作成し、データを出力する前にこのサービスを3秒間一時停止します

@Service
public class AsynService {
    @Async
    public void async(){
        try {
            Thread.sleep(3000);
            System.out.println("执行结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

コントローラを記述し、このサービスクラスを呼び出します

@RestController
public class IndexController {
    @Autowired
    public AsynService asynService;
    @RequestMapping("/index")
    public String  asynctask(){
        asynService.async();
        return "async task";
    }
}

実行後、ブラウザでhttp:// localhost:8080 / indexにアクセスすると、非同期がオンになっているため、ブラウザは最初に非同期タスクを出力し、コンソールは3秒後に実行の終了を出力します。

(2)時限タスク
前回のスパイクオープンソースプロジェクトで時限タスクを使用しました。当時のシーンでは、1分ごとにデータベースをポーリングして、期限切れの製品を照会していました。スケジュールされたタスクには、毎日12時にログを自動的にパックする、毎晩12時にバックアップするなど、さまざまなアプリケーションがあります。SpringBootでタイミングタスクを実現するには、@ Scheduledと@EnableSchedulingの2つの注釈のみが必要です。以前と同様に、@ Scheduledは定期的に実行する必要のあるタスクに使用され、@ EnableSchedulingはスタートアップクラスに使用されます。まず、時限タスククラスを作成しましょう。

@Service
public class ScheduleService {

    @Scheduled(cron = "0/10 * * * * ? ")
    public void sayHello(){
        System.out.println("hello");
    }
}

タイミングタスクの実行時間を決定するには、@ Scheduledアノテーションにcron式を追加する必要があります。ここでは10秒ごとに実行されることを意味します。

次に、注釈@EnableSchedulingをスタートアップクラスに追加します。プロジェクトを実行すると、10秒ごとにhelloが出力されることがわかります。

おすすめ

転載: blog.csdn.net/qwe123147369/article/details/109180522