प्रौद्योगिकी साझेदारी

SpringBoot प्रतिदिनं: @Scheduled कार्यान्वयनम् एकवारं निष्पादितं भवति यदा सेवा आरभ्यते

2024-07-12

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


निर्धारितकार्यस्य विषये वदन् अस्माभिः @Scheduled, Quartz तथा XXL-JOB इत्येतयोः विषये चिन्तनीयम् तथापि केचन एकलसेवाः अथवा लघुपरियोजनाः सुविधायै गतिं च कर्तुं अतुल्यकालिककार्यं कार्यान्वितुं प्रत्यक्षतया @Scheduled इत्यस्य उपयोगं कर्तुं शक्नुवन्ति । अतः अस्य लेखस्य विषयावश्यकता विस्तारिता अस्ति ।

यदा परियोजनायां @Scheduled इत्यस्य उपयोगः भवति तदा परियोजनायाः आरम्भे निर्दिष्टं अतुल्यकालिकं कार्यं कथं पूर्वमेव निष्पादयितुं शक्यते?

1. @Scheduled इत्यस्य विस्तृतव्याख्यानम्

@Scheduled एनोटेशनं कार्यनिष्पादनसमयं लचीलतया नियन्त्रयितुं बहुविधमापदण्डान् समर्थयति ।

  • cron: Cron expression, यत् सेकण्ड्, निमेष, घण्टा, दिवस, मास, सप्ताह इत्यादीन् समीचीनतया नियन्त्रयितुं शक्नोति।
    अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
  • zone: एकं समयक्षेत्रं प्राप्नुमः, यथा एशिया/शंघाई, सामान्यतया वयं यत् समयक्षेत्रं उपयुञ्ज्महे।
  • fixedDelay: अन्तिमनिष्पादनसमाप्तिसमयस्य कियत्कालं यावत् पुनः निष्पादितं भविष्यति । यथा @Scheduled(fixedDelay = 5000)
  • fixedDelayString: इत्यस्य अर्थः fixedDelay इत्यस्य समानः अस्ति, परन्तु स्ट्रिंग् इत्यस्य रूपेण । केवलं भेदः अस्ति यत् एतत् स्थानधारकाणां समर्थनं करोति, यथा @Scheduled(fixedDelayString = "5000") ।
  • fixedRate: निष्पादनसमयस्य अन्तिमप्रारम्भस्य कियत्कालं यावत्, यथा @Scheduled(fixedRate = 5000)
  • fixedRateString: इत्यस्य अर्थः fixedRate इत्यस्य समानः अस्ति, परन्तु स्ट्रिंग् इत्यस्य रूपेण । केवलं भेदः अस्ति यत् स्थानधारकाः समर्थिताः सन्ति ।
  • initialDelay: प्रथमवारं निष्पादनं कियत्कालं यावत् विलम्बितव्यं उदाहरणार्थं, प्रथमविलम्बः निष्पादनात् पूर्वं 1 सेकण्ड् भवति तदनन्तरं, fixedRate नियमानुसारं प्रत्येकं 5 सेकण्ड् मध्ये निष्पादितं भविष्यति ) ९.
  • initialDelayString: इत्यस्य अर्थः initialDelayString इत्यस्य समानः अस्ति, परन्तु स्ट्रिंग् इत्यस्य रूपेण । केवलं भेदः अस्ति यत् स्थानधारकाः समर्थिताः सन्ति ।

2. तर्कस्य कार्यान्वयनम्

1. एकं निर्धारितकार्यतर्कविधिं रचयन्तु

/**
 * @Author 码至终章
 * @Version 1.0
 */
@Component
public class ScheduledTest {

    @Scheduled(cron = "* 1 * * * ?")
    public void task1() throws Exception{
        System.out.println("task1 执行: " + Thread.currentThread() + "-" + DateTime.now());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. नूतनं स्टार्टअप निष्पादनवर्गं रचयन्तु

अयं वर्गः मुख्यतया आरम्भे निर्दिष्टं कार्यविधिं मैन्युअल् रूपेण आह्वयति

/**
 * @Author 码至终章
 * @Version 1.0
 */
@Component
public class StartupTasks {

    private final ScheduledTest scheduledTasks;

    public StartupTasks(ScheduledTest scheduledTasks) {
        this.scheduledTasks = scheduledTasks;
    }

    @PostConstruct
    public void startUp() {
        try {
            System.out.println("服务启动执行任务");
            scheduledTasks.task1();
        }catch (Exception e){
			e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

नोट्: स्मर्यतां यत् @EnableScheduling इत्येतत् स्टार्टअप क्लास् मध्ये योजयन्तु येन निर्धारितं कार्यं निष्पादितं भविष्यति अवश्यं, एतत् अस्य लेखस्य तर्कपरीक्षां न प्रभावितं करोति ।

3. परीक्षणस्य परिणामः

सेवा आरब्धस्य अनन्तरं मुद्रणसूचना पश्यन्तु
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु