Teknologian jakaminen

Aikataulutettujen tehtävien kirjoittaminen springbootissa

2024-07-08

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

Osa 1: Johdanto

1.1 Suunniteltujen tehtävien merkitys

Nykyaikaisessa ohjelmistokehityksessä aikataulutetut tehtävät ovat keskeinen osa sovellusautomaatiota ja toiminnan tehokkuutta. Olipa kyseessä tietojen varmuuskopiointi, järjestelmän kuntotarkastus, säännöllinen raporttien luominen tai käyttäjien toiminnan käynnistämät automatisoidut prosessit, ajoitetut tehtävät ovat välttämättömiä. Ne varmistavat liiketoimintalogiikan jatkuvuuden ja järjestelmän itseylläpitokyvyn.

1.2 Aikataulutettujen tehtävien soveltaminen eri aloilla
  • Enterprise Resource Planning (ERP) -järjestelmä: Aikataulutettujen tehtävien avulla voidaan luoda talousraportteja, varastopäivityksiä jne.
  • Sisällönhallintajärjestelmä (CMS): Julkaise sisältöä säännöllisesti, tyhjennä välimuisti jne.
  • Customer Relationship Management (CRM) -järjestelmä: Lähetä säännöllisesti markkinointisähköposteja, asiakkaiden seurantamuistutuksia jne.
  • Online-mainontaalusta: Säädä mainontastrategioita säännöllisesti, optimoi mainonnan näyttö jne.
1.3 Haasteita perinteisten aikataulutehtävien toteuttamisessa

Perinteisessä kehitysmallissa ajoitettujen tehtävien toteuttaminen vaatii usein luottamista käyttöjärjestelmän ajoitettuihin tehtäviin (kuten Linuxin crontab) tai monimutkaisen liiketoimintalogiikan kirjoittamista. Näillä menetelmillä on monia haittoja:

  • Monimutkainen kokoonpano: Edellyttää syvällistä ymmärrystä käyttöjärjestelmän tehtävien ajoituksesta.
  • Vaikea ylläpitää: Tehtävät ovat hajallaan eri järjestelmissä ja sovelluksissa, mikä vaikeuttaa niiden yhtenäistä hallintaa ja valvontaa.
  • Huono skaalautuvuus: Yrityksesi kasvaessa tehtävien lisäämisestä tai muokkaamisesta tulee monimutkaista ja aikaa vievää.
1.4 Spring Boot -ratkaisu

Spring Boot on suosittu Java-kehys, joka tarjoaa tyylikkäämmän ja integroidumman tavan toteuttaa ajoitettuja tehtäviä. Se yksinkertaistaa määritystä ja tarjoaa monipuoliset sovellusliittymät, joiden avulla kehittäjät voivat nopeasti integroida ajoitetut tehtävätoiminnot sovelluksiin.

1.5 Spring Bootin tuki ajoitetuille tehtäville

Spring Boot ohi@EnableSchedulingja@Scheduled Merkintöjen avulla on erittäin helppoa kirjoittaa ja määrittää ajoitettuja tehtäviä Spring-sovelluksissa. Lisäksi Spring Boot tarjoaa myös integraation Spring Task Scheduleriin, joka tukee edistyneempiä ajoitettujen tehtävien vaatimuksia.

1.6 Miksi valita Spring Boot ajoitettujen tehtävien toteuttamiseen
  • Yksinkertaista konfigurointia: Ajoitetut tehtävät voidaan toteuttaa merkintöjen ja pienen määrityksen avulla.
  • Helppo integroida: Saumattomasti integroitu Spring-ekosysteemiin, voit hyödyntää muita Spring-ominaisuuksia, kuten tapahtumien hallintaa, riippuvuuden lisäystä jne.
  • Vahva yhteisön tuki: Spring Bootilla on suuri kehittäjäyhteisö, joka tarjoaa paljon resursseja ja parhaita käytäntöjä.
  • Helppo testata: Spring Bootin ajoitetut tehtävät helpottavat yksikkötestauksen ja integrointitestauksen suorittamista.

Osa 2: Johdatus Spring Bootiin

2.1 Jousikenkien yleiskatsaus

Spring Bootin on kehittänyt Pivotal-tiimi (nyt osa VMwarea), ja se on modulaarinen, nopea kehitys- ja käyttöönottokehys, joka perustuu Spring-kehykseen. Sen tarkoituksena on yksinkertaistaa Spring-sovellusten alkuasennus- ja kehitysprosessia ja vähentää kehittäjien konfigurointityötä tarjoamalla sarja oletuskokoonpanoja.

2.2 Spring Bootin ydinominaisuudet
  • automaattinen konfigurointi: Spring Boot voi määrittää Spring-sovellukset automaattisesti projektin riippuvuuksien perusteella.
  • Toimi itsenäisesti: Spring Boot -sovellukset sisältävät sisäänrakennettuja HTTP-palvelimia (kuten Tomcat, Jetty tai Undertow), eikä niitä tarvitse ottaa käyttöön ulkoisilla palvelimilla.
  • XML-määritystä ei tarvita: Spring Boot ei vaadi XML-määritystiedostojen käyttöä, vaikka se silti tukee XML-määritystä.
  • Mikropalvelun tuki: Spring Boot sopii erittäin hyvin mikropalveluarkkitehtuuriin ja on helppo rakentaa, ottaa käyttöön ja laajentaa.
2.3 Spring Boot käynnistysmekanismi

Spring Boot -sovellus käynnistetään kauttaSpringApplication.run() Menetelmä toteutettu, se luo ja määrittää automaattisesti Spring-sovelluskontekstin. Spring Boot tarjoaa myös komentoriviliittymän (CLI) ja Actuator-päätepisteen sovellusten valvontaa ja hallintaa varten.

2.4 Spring Boot -riippuvuuden hallinta

Spring Boot ohispring-boot-starter-parent Tarjoaa riippuvuuden hallinnan ja yksinkertaistaa Maven- ja Gradle-projektien määrittämistä. Se määrittää ennalta versionumerot ja riippuvuusalueet, mikä tekee riippuvuusristiriitojen ja versionhallinnan hallinnasta helpompaa.

2.5 Spring Bootin yhteisö ja plug-in-ekologia

Spring Bootilla on aktiivinen avoimen lähdekoodin yhteisö, joka tarjoaa suuren määrän laajennuksia ja "aloitusohjelmia", jotka sisältävät tiettyjen toimintojen rakentamiseen tarvittavia riippuvuuksia, kuten esim.spring-boot-starter-webRESTful sovellusten rakentamiseen.

2.6 Esimerkki: Luo yksinkertainen Spring Boot -sovellus

Alla on vaiheet yksinkertaisen Spring Boot -sovelluksen ja vastaavan mallikoodin luomiseksi:

  1. Luo projektirakenne: Käytä Spring Initializr -ohjelmaa (https://start.spring.io/) projektirakenteen nopeaan luomiseen.
  2. Lisää riippuvuuksia: Valitse esimerkiksi tarvittavat alkupalatspring-boot-starter-web
  3. Kirjoita pääsovellusluokka
    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. Luo REST-ohjain
    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 Spring Boot -käyttöönottomenetelmä
  • Pakattu JAR-muodossa: Spring Boot -sovellus voidaan pakata suoritettavaan JAR-tiedostoonjava -jarKomento suoritetaan.
  • Konteissa tapahtuva käyttöönotto: Spring Boot -sovellukset sopivat hyvin konttiteknologiaan, kuten Dockeriin, ja niitä on helppo ottaa käyttöön pilviympäristöissä.
2.8 Spring Bootin ja Spring Frameworkin välinen suhde

Spring Boot ei korvaa Spring Frameworkia, vaan nopea kehitysmenetelmä, joka perustuu Spring Frameworkiin. Se tarjoaa nopean tavan käynnistää Spring-sovellukset säilyttäen samalla kaikki Spring Frameworkin ominaisuudet ja joustavuuden.

2.9 Miksi valita Spring Boot?
  • nopea kehitys: Spring Bootin automaattinen konfigurointi ja yksinkertaistettu konfigurointi nopeuttavat kehitystä.
  • Helppo ottaa käyttöön: Sulautettu HTTP-palvelin ja säiliön tuki tekevät käyttöönotosta helppoa.
  • yhteisön tukea: Spring Boot -yhteisö tarjoaa runsaasti resursseja, laajennuksia ja parhaita käytäntöjä.
2.10 Johtopäätös

Spring Boot on nykyaikaiseen Java-kehitykseen suunniteltu kehys. Se yksinkertaistaa konfigurointia ja tarjoaa joukon valmiita toimintoja, jolloin kehittäjät voivat keskittyä liiketoimintalogiikan toteuttamiseen infrastruktuurin rakentamisen sijaan. Seuraavissa luvuissa perehdymme Spring Bootin soveltamiseen ajoitetuissa tehtävissä ja näytämme, kuinka sen ominaisuuksia käytetään tehokkaiden ja luotettavien automatisoitujen tehtävien rakentamiseen.

Osa 3: Aikataulutettujen tehtävien peruskäsitteet

3.1 Aikataulutettujen tehtävien määrittely

Ajastettu tehtävä on koodinpätkä tai ohjelma, joka suoritetaan automaattisesti ennalta määrättynä aikana. Ne voivat olla kertaluonteisia tai määräajoin, ja niitä käytetään automaattisten tehtävien suorittamiseen, kuten tietojen varmuuskopiointiin, ilmoitusten lähettämiseen, ajoitettujen tarkistusten suorittamiseen jne.

3.2 Aikataulutettujen tehtävien tyypit
  • kertaluonteisia tehtäviä: Suoritetaan vain kerran, yleensä tiettyjä alustus- tai puhdistustoimintoja varten.
  • säännöllisiä tehtäviä: Toistuvasti suoritetaan tietyllä aikavälillä, joka voi olla kiinteä aikaväli tai kalenteripohjainen aika.
3.3 Aikataulutettujen tehtävien sovellusskenaariot
  • datan varmuuskopio: Varmuuskopioi tietokanta säännöllisesti tietoturvan varmistamiseksi.
  • Raportin luominen: Luo säännöllisesti liiketoimintaraportteja päätöksenteon avuksi.
  • Järjestelmän valvonta: Tarkista järjestelmän tila säännöllisesti löytääksesi ja ratkaistaksesi ongelmat ajoissa.
  • Käyttäjän ilmoitus: Lähetä muistutuksia tai ilmoituksia käyttäjän käyttäytymisen tai tiettyjen tapahtumien perusteella.
3.4 Suunniteltujen tehtävien merkitys

Ajoitetut tehtävät ovat kriittisiä järjestelmän pitämiseksi käynnissä ja liiketoimintaprosessien automatisoimiseksi. Ne voivat vähentää manuaalista puuttumista, lisätä tehokkuutta ja varmistaa tehtävien oikea-aikaisuuden ja tarkkuuden.

3.5 Haasteita ajoitettujen tehtävien toteuttamisessa
  • ajan tarkkuus: Varmista, että tehtävät suoritetaan tarkasti sovittuna aikana.
  • Virheiden käsittely: Käsittele suorituksen aikana mahdollisesti ilmeneviä virheitä oikein.
  • Resurssienhallinta: Kohdista resurssit, jotta vältät vaikutuksen järjestelmän suorituskykyyn tehtävän suorittamisen aikana.
3.6 Suunniteltujen tehtävien toteuttaminen
  • käyttöjärjestelmän taso: Käytä crontabia tai Windows Task Scheduleria.
  • ohjelmointikielen taso: Käytä kielikohtaista kirjastoa tai kehystä, kuten Javaajava.util.Timer
  • Sovelluskehyksen taso: Käytä kehyksen tarjoamaa ajoitettua tehtävätukea, kuten Spring@Scheduled
3.7 Esimerkki: Java:n käyttöjava.util.TimerToteuta ajoitetut tehtävät

Tässä on esimerkki Java-standardikirjaston käyttämisestäTimerEsimerkki yksinkertaisesta ajoitetusta tehtävästä, jonka luoka on toteuttanut:

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 Esimerkki: cron-lausekkeiden käyttö

Cron-lausekkeet ovat tehokas tapa määrittää ajoitettujen tehtävien suoritusaika. Seuraavassa on esimerkki cron-lausekkeesta tehtävän suorittamiseksi joka päivä kello 1:00:

0 0 1 * * ?
3.9 Ajoitetut tehtävät Spring Bootissa

Spring Boot ohi@Scheduled Huomautukset yksinkertaistavat ajoitettujen tehtävien määrittämistä ja toteuttamista.Tässä on käyttöä@ScheduledSelostettu Spring Boot ajoitetun tehtävän esimerkki:

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 Suunniteltujen tehtävien seuranta ja hallinta
  • puunkorjuu: Tallenna tehtävien suorittaminen helpottaaksesi ongelmien seurantaa ja suorituskyvyn seurantaa.
  • terveystarkastus: Tarkista ajoitettujen tehtävien kunto säännöllisesti varmistaaksesi, että ne toimivat normaalisti.

Osa 4: Ajoitustehtävän toteutus Spring Bootissa

4.1 Käyttö@Scheduledhuomautus

@Scheduled Se on Springin tarjoama huomautus, joka yksinkertaistaa ajoitettujen tehtävien toteuttamista. Sen avulla voit luoda säännöllisin väliajoin suoritettavia menetelmiä yksinkertaisen huomautusmäärityksen avulla.

4.2 @ScheduledHuomautuksen määritys
  • fixedRate: Määritä kiinteä aikaväli (millisekunteina) kahden tehtävän suorittamisen välillä.
  • fixedDelay: Määritä kiinteä aikaväli viimeisen tehtävän suorituksen lopun ja seuraavan tehtävän alun välillä.
  • initialDelay: Määritä viiveaika ennen kuin tehtävä suoritetaan ensimmäisen kerran.
  • cron: Määritä tehtävän suoritusaikataulu cron-lausekkeiden avulla.
4.3 Esimerkki: KäyttöfixedRate

Seuraava esimerkki näyttää menetelmän, joka suoritetaan 5 sekunnin välein:

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 Esimerkki: KäyttöfixedDelay

Seuraava esimerkki näyttää menetelmän, joka suoritetaan 1 sekunti sen jälkeen, kun edellinen tehtävä on suoritettu:

@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.5 Esimerkki: KäyttöinitialDelay

Seuraava esimerkki näyttää menetelmän, joka suoritetaan ensin 10 sekuntia sovelluksen käynnistymisen jälkeen ja sitten 5 sekunnin välein:

@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.6 cron-lausekkeiden käyttö

Cron-lausekkeet tarjoavat monimutkaisempia aika-asetuksia, joiden avulla voit määrittää tietyt suoritusajat. Seuraava esimerkki näyttää menetelmän, joka suoritetaan joka päivä kello 1:00:

@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.7 Tehtävän suorituspoikkeuksien käsittely

Ajoitetut tehtävät voivat sisältää poikkeuksia, Spring tarjoaa@Asynchuomautus suorittaa tehtäviä asynkronisesti ja käyttää@ExceptionHandlerkäsitellä poikkeuksia.

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