2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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:
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.
Boot Musim Semi telah berlalu@EnableScheduling
Dan@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.
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.
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.
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.
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-web
Untuk membangun aplikasi RESTful.
Berikut adalah langkah-langkah untuk membuat aplikasi Spring Boot sederhana, dan kode contoh yang sesuai:
spring-boot-starter-web
。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);
}
}
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!";
}
}
java -jar
Perintah berjalan.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.
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.
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.
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.
java.util.Timer
。@Scheduled
。java.util.Timer
Melaksanakan tugas yang dijadwalkanBerikut adalah contoh penggunaan perpustakaan standar JavaTimer
Contoh 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);
}
}
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 * * ?
Boot Musim Semi telah berlalu@Scheduled
Anotasi menyederhanakan konfigurasi dan implementasi tugas terjadwal.Ini kegunaannya@Scheduled
Contoh 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());
}
}
@Scheduled
anotasi@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.
@Scheduled
Konfigurasi anotasifixedRate
: 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.fixedRate
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());
}
}
fixedDelay
Contoh berikut menunjukkan metode yang dijalankan 1 detik setelah tugas sebelumnya selesai dijalankan:
@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
initialDelay
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());
}
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());
}
Tugas terjadwal mungkin menimbulkan pengecualian, Spring menyediakan@Async
anotasi untuk melakukan tugas secara asinkron, dan digunakan@ExceptionHandler
untuk menangani pengecualian.
@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
if (Math.random()