Berbagi teknologi

Menulis tugas terjadwal di springboot

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Bagian 1: Pendahuluan

1.1 Pentingnya tugas yang dijadwalkan

Dalam pengembangan perangkat lunak modern, tugas terjadwal merupakan komponen kunci otomatisasi aplikasi dan efisiensi operasional. Baik itu pencadangan data, pemeriksaan kesehatan sistem, pembuatan laporan rutin, atau proses otomatis yang dipicu oleh aktivitas pengguna, tugas terjadwal memainkan peran yang sangat diperlukan. Mereka memastikan kelangsungan logika bisnis dan kemampuan pemeliharaan mandiri sistem.

1.2 Penerapan tugas terjadwal di berbagai bidang
  • Sistem Perencanaan Sumber Daya Perusahaan (ERP).: Tugas terjadwal dapat digunakan untuk menghasilkan laporan keuangan, pembaruan inventaris, dll.
  • Sistem Manajemen Konten (CMS): Publikasikan konten secara teratur, hapus cache, dll.
  • Sistem Manajemen Hubungan Pelanggan (CRM).: Secara teratur mengirim email pemasaran, pengingat tindak lanjut pelanggan, dll.
  • Platform periklanan daring: Menyesuaikan strategi periklanan secara teratur, mengoptimalkan tampilan iklan, dll.
1.3 Tantangan dalam melaksanakan tugas-tugas tradisional yang dijadwalkan

Dalam model pengembangan tradisional, penerapan tugas terjadwal sering kali memerlukan ketergantungan pada tugas terjadwal sistem operasi (seperti crontab Linux) atau penulisan logika bisnis yang kompleks. Metode-metode ini memiliki banyak ketidaknyamanan:

  • Konfigurasi yang rumit: Membutuhkan pemahaman mendalam tentang penjadwal tugas sistem operasi.
  • Sulit untuk dipertahankan: Tugas tersebar di berbagai sistem dan aplikasi, sehingga sulit untuk mengelola dan memantaunya secara seragam.
  • Skalabilitas yang buruk: Seiring berkembangnya bisnis Anda, penambahan atau perubahan tugas menjadi rumit dan memakan waktu.
1.4 Solusi Boot Musim Semi

Sebagai kerangka kerja Java yang populer, Spring Boot menyediakan cara yang lebih elegan dan terintegrasi untuk mengimplementasikan tugas terjadwal. Ini menyederhanakan konfigurasi dan menyediakan API yang kaya, memungkinkan pengembang dengan cepat mengintegrasikan fungsi tugas terjadwal ke dalam aplikasi.

1.5 Dukungan Spring Boot untuk tugas terjadwal

Boot Musim Semi telah berlalu@EnableSchedulingDan@Scheduled Anotasi membuatnya sangat mudah untuk menulis dan mengonfigurasi tugas terjadwal di aplikasi Spring. Selain itu, Spring Boot juga menyediakan integrasi dengan Spring Task Scheduler, yang menyediakan dukungan untuk persyaratan tugas terjadwal lebih lanjut.

1.6 Mengapa memilih Spring Boot untuk mengimplementasikan tugas terjadwal
  • Sederhanakan konfigurasi: Tugas terjadwal dapat diimplementasikan melalui anotasi dan sedikit konfigurasi.
  • Mudah untuk diintegrasikan: Terintegrasi secara mulus dengan ekosistem Spring, Anda dapat memanfaatkan fitur Spring lainnya seperti manajemen transaksi, injeksi ketergantungan, dll.
  • Dukungan komunitas yang kuat: Spring Boot memiliki komunitas pengembang besar yang menyediakan banyak sumber daya dan praktik terbaik.
  • Mudah untuk diuji: Tugas terjadwal Spring Boot memudahkan untuk melakukan pengujian unit dan pengujian integrasi.

Bagian 2: Pengantar Spring Boot

2.1 Ikhtisar Boot Musim Semi

Spring Boot dikembangkan oleh tim Pivotal (sekarang bagian dari VMware) dan merupakan kerangka kerja pengembangan dan penerapan yang modular dan cepat berdasarkan kerangka kerja Spring. Hal ini bertujuan untuk menyederhanakan pengaturan awal dan proses pengembangan aplikasi Spring dan mengurangi pekerjaan konfigurasi pengembang dengan menyediakan serangkaian konfigurasi default.

2.2 Fitur inti Spring Boot
  • konfigurasi otomatis: Spring Boot dapat secara otomatis mengkonfigurasi aplikasi Spring berdasarkan dependensi dalam proyek.
  • Beroperasi secara mandiri: Aplikasi Spring Boot menyertakan server HTTP bawaan (seperti Tomcat, Jetty, atau Undertow) dan tidak perlu diterapkan ke server eksternal.
  • Tidak diperlukan konfigurasi XML: Spring Boot tidak memerlukan penggunaan file konfigurasi XML, meskipun tetap mendukung konfigurasi XML.
  • Dukungan layanan mikro: Spring Boot sangat cocok untuk arsitektur layanan mikro dan mudah dibuat, diterapkan, dan diperluas.
2.3 Mekanisme startup Spring Boot

Aplikasi Spring Boot dimulai melaluiSpringApplication.run() Metode diterapkan, maka secara otomatis akan membuat dan mengkonfigurasi konteks aplikasi Spring. Spring Boot juga menyediakan antarmuka baris perintah (CLI) dan titik akhir Aktuator untuk memantau dan mengelola aplikasi.

2.4 Manajemen ketergantungan Spring Boot

Boot Musim Semi telah berlaluspring-boot-starter-parent Menyediakan manajemen ketergantungan dan menyederhanakan konfigurasi proyek Maven dan Gradle. Ini telah menentukan nomor versi dan rentang ketergantungan, membuat konflik ketergantungan dan kontrol versi lebih mudah dikelola.

2.5 Komunitas Spring Boot dan ekologi plug-in

Spring Boot memiliki komunitas sumber terbuka aktif yang menyediakan sejumlah besar plugin dan "Pemula" yang berisi dependensi yang diperlukan untuk membangun fungsionalitas tertentu, sepertispring-boot-starter-webUntuk membangun aplikasi RESTful.

2.6 Contoh: Membuat aplikasi Spring Boot sederhana

Berikut adalah langkah-langkah untuk membuat aplikasi Spring Boot sederhana, dan kode contoh yang sesuai:

  1. Buat struktur proyek: Gunakan Spring Initializr (https://start.spring.io/) untuk membuat struktur proyek dengan cepat.
  2. Tambahkan dependensi: Pilih Starter yang diperlukan, misalnyaspring-boot-starter-web
  3. Tulis kelas aplikasi utama
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MyApp {
        public static void main(String[] args) {
            SpringApplication.run(MyApp.class, args);
        }
    }
    
  4. Buat pengontrol REST
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MyController {
        @GetMapping("/")
        public String home() {
            return "Hello, Spring Boot!";
        }
    }
    
2.7 Metode penerapan Spring Boot
  • Dikemas sebagai JAR: Aplikasi Spring Boot dapat dikemas ke dalam file JAR yang dapat dieksekusi melaluijava -jarPerintah berjalan.
  • Penerapan dalam container: Aplikasi Spring Boot sangat cocok untuk teknologi containerisasi seperti Docker dan mudah diterapkan di lingkungan cloud.
2.8 Hubungan antara Spring Boot dan Spring Framework

Spring Boot bukanlah pengganti Spring Framework, melainkan metode pengembangan cepat berdasarkan Spring Framework. Ini menyediakan cara cepat untuk memulai aplikasi Spring sambil mempertahankan semua fitur dan fleksibilitas Spring Framework.

2.9 Mengapa memilih Spring Boot?
  • perkembangan yang cepat: Konfigurasi otomatis Spring Boot dan konfigurasi yang disederhanakan membuat pengembangan lebih cepat.
  • Mudah untuk diterapkan: Server HTTP tertanam dan dukungan containerisasi membuat penerapan menjadi sederhana.
  • dukungan komunitas: Komunitas Spring Boot menyediakan banyak sumber daya, plug-in, dan praktik terbaik.
2.10 Kesimpulan

Spring Boot adalah kerangka kerja yang dirancang untuk pengembangan Java modern. Ini menyederhanakan konfigurasi dan menyediakan serangkaian fungsi out-of-the-box, memungkinkan pengembang untuk fokus pada implementasi logika bisnis daripada pembangunan infrastruktur. Pada bab berikut, kami akan mempelajari penerapan Spring Boot dalam tugas terjadwal dan menunjukkan cara menggunakan fitur-fiturnya untuk membuat tugas otomatis yang efisien dan andal.

Bagian 3: Konsep dasar tugas terjadwal

3.1 Definisi tugas terjadwal

Tugas terjadwal adalah sepotong kode atau program yang dijalankan secara otomatis pada waktu yang telah ditentukan. Mereka bisa satu kali atau berkala dan digunakan untuk melakukan tugas otomatis seperti pencadangan data, mengirim pemberitahuan, melakukan pemeriksaan terjadwal, dll.

3.2 Jenis tugas terjadwal
  • tugas satu kali: Dieksekusi hanya sekali, biasanya untuk operasi inisialisasi atau pembersihan tertentu.
  • tugas berkala: Dieksekusi berulang kali pada interval waktu tertentu, yang dapat berupa interval tetap atau waktu berdasarkan kalender.
3.3 Skenario penerapan tugas terjadwal
  • cadangan data: Cadangkan database secara berkala untuk menjamin keamanan data.
  • Pembuatan laporan: Menghasilkan laporan bisnis secara teratur untuk membantu pengambilan keputusan.
  • Pemantauan sistem: Periksa status sistem secara berkala untuk menemukan dan memecahkan masalah secara tepat waktu.
  • Pemberitahuan pengguna: Mengirim pengingat atau pemberitahuan berdasarkan perilaku pengguna atau peristiwa tertentu.
3.4 Pentingnya tugas yang dijadwalkan

Tugas terjadwal sangat penting untuk menjaga sistem Anda tetap berjalan dan mengotomatiskan proses bisnis. Mereka dapat mengurangi intervensi manual, meningkatkan efisiensi, dan memastikan ketepatan waktu dan keakuratan tugas.

3.5 Tantangan dalam melaksanakan tugas yang dijadwalkan
  • akurasi waktu: Memastikan bahwa tugas dijalankan secara akurat pada waktu yang dijadwalkan.
  • Penanganan kesalahan: Menangani kesalahan yang mungkin terjadi selama eksekusi dengan benar.
  • Pengelolaan sumber daya: Alokasikan sumber daya secara wajar untuk menghindari dampak pada kinerja sistem selama pelaksanaan tugas.
3.6 Bagaimana melaksanakan tugas yang dijadwalkan
  • tingkat sistem operasi: Gunakan crontab atau Penjadwal Tugas Windows.
  • tingkat bahasa pemrograman: Gunakan perpustakaan atau kerangka kerja khusus bahasa, seperti Javajava.util.Timer
  • Tingkat kerangka aplikasi: Gunakan dukungan tugas terjadwal yang disediakan oleh kerangka kerja, seperti Spring@Scheduled
3.7 Contoh: Menggunakan Javajava.util.TimerMelaksanakan tugas yang dijadwalkan

Berikut adalah contoh penggunaan perpustakaan standar JavaTimerContoh tugas terjadwal sederhana yang dilaksanakan oleh kelas:

import java.util.Timer;
import java.util.TimerTask;

public class SimpleTimerTask {
    public static void main(String[] args) {
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行定时任务:"   System.currentTimeMillis());
            }
        };
        Timer timer = new Timer();
        long delay = 0;
        long intervalPeriod = 1000; // 间隔1秒执行一次
        timer.scheduleAtFixedRate(task, delay, intervalPeriod);
    }
}
3.8 Contoh: Menggunakan ekspresi cron

Ekspresi cron adalah cara ampuh untuk mengonfigurasi waktu eksekusi tugas terjadwal. Berikut adalah contoh ekspresi cron yang menjalankan tugas setiap hari pada jam 1 pagi:

0 0 1 * * ?
3.9 Tugas terjadwal di Spring Boot

Boot Musim Semi telah berlalu@Scheduled Anotasi menyederhanakan konfigurasi dan implementasi tugas terjadwal.Ini kegunaannya@ScheduledContoh tugas terjadwal Spring Boot yang dianotasi:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {
    
    @Scheduled(fixedRate = 5000) // 每5秒执行一次
    public void reportCurrentTime() {
        System.out.println("当前时间:"   System.currentTimeMillis());
    }
    
    @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
    public void scheduleTask() {
        System.out.println("执行定时任务:"   System.currentTimeMillis());
    }
}
3.10 Pemantauan dan pengelolaan tugas yang dijadwalkan
  • pencatatan: Catat pelaksanaan tugas untuk memfasilitasi pelacakan masalah dan pemantauan kinerja.
  • pemeriksaan kesehatan: Periksa status kesehatan tugas terjadwal secara rutin untuk memastikan tugas tersebut berjalan normal.

Bagian 4: Mengatur waktu implementasi tugas di Spring Boot

4.1 Penggunaan@Scheduledanotasi

@Scheduled Ini adalah anotasi yang disediakan oleh Spring untuk menyederhanakan implementasi tugas yang dijadwalkan. Ini memungkinkan Anda membuat metode yang dijalankan secara berkala melalui konfigurasi anotasi sederhana.

4.2 @ScheduledKonfigurasi anotasi
  • fixedRate: Menentukan interval waktu tetap (dalam milidetik) antara dua eksekusi tugas.
  • fixedDelay: Menentukan interval waktu tetap antara akhir pelaksanaan tugas terakhir dan dimulainya tugas berikutnya.
  • initialDelay: Menentukan waktu tunda sebelum tugas dijalankan untuk pertama kalinya.
  • cron: Gunakan ekspresi cron untuk menentukan jadwal pelaksanaan tugas.
4.3 Contoh: PenggunaanfixedRate

Contoh berikut menunjukkan metode yang dijalankan setiap 5 detik:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class FixedRateTask {

    @Scheduled(fixedRate = 5000)
    public void taskWithFixedRate() {
        System.out.println("任务执行:"   LocalDateTime.now());
    }
}
4.4 Contoh: PenggunaanfixedDelay

Contoh berikut menunjukkan metode yang dijalankan 1 detik setelah tugas sebelumnya selesai dijalankan:

@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.5 Contoh: MenggunakaninitialDelay

Contoh berikut menunjukkan metode yang dijalankan pertama 10 detik setelah aplikasi dimulai, dan kemudian setiap 5 detik:

@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.6 Menggunakan ekspresi cron

Ekspresi cron memberikan pengaturan waktu yang lebih kompleks, memungkinkan Anda menentukan waktu eksekusi tertentu. Contoh berikut menunjukkan metode yang dieksekusi setiap hari pada jam 1 pagi:

@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.7 Menangani pengecualian pelaksanaan tugas

Tugas terjadwal mungkin menimbulkan pengecualian, Spring menyediakan@Asyncanotasi untuk melakukan tugas secara asinkron, dan digunakan@ExceptionHandleruntuk menangani pengecualian.

@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
    if (Math.random()