Spring Scheduler - upswp/THXSTORE GitHub Wiki

Spring Scheduler

Spring Scheduler๋ž€ ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ๋˜๋Š” ์ผ์ •ํ•œ ์‹œ๊ฐ์— ํŠน์ • ๋กœ์ง์„ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Spring์—๋Š” Spring Scheduler์™€ Spring quartz 2๊ฐ€์ง€ ๋ฐฉ์‹์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Scheduler์—์„œ ์ฃผ์˜ํ•  ์ ์€ aws์™€ spring ์„œ๋ฒ„๊ฐ€ ํ•œ๊ตญ์‹œ๊ฐ„์ธ์ง€ ์ฒดํฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ex) java -jar -Duser.timezone=Asia/Seoul ./app.jar // ํ•œ๊ตญ์‹œ๊ฐ„์œผ๋กœ

Spring Scheduler

Spring์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋”ฐ๋กœ ์˜์กด์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ณ , @EnableScheduling ์–ด๋…ธํ…Œ์ด์…˜์„ Application ํด๋ž˜์Šค์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Scheduled๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฐพ์•„ ์‹คํ–‰์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

@EnableScheduling
@SpringBootApplication
public class Application() {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— void๋ผ๋Š” ์ž๋ฃŒํ˜•๊ณผ(return ํƒ€์ž…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—,) ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์œผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.(ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๋ชป ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.)

์ˆ˜ํ–‰ํ•  ๋ฉ”์†Œ๋“œ ์œ„์— @Scheduled๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

@Scheduled(....)
public void scheduleTest() {
    System.out.println("1");
}

@Scheduled ์˜ต์…˜

  1. fixedRate : ์ด์ „์— ์‹คํ–‰๋œ Task์˜ ์‹œ์ž‘์‹œ๊ฐ„์œผ๋กœ ๋ถ€ํ„ฐ ์ •์˜๋œ ์‹œ๊ฐ„๋งŒํผ ์ง€๋‚œ ํ›„ Task๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.(๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ ๋‹จ์œ„) ex) @Scheduled(fixedRate = 1000)

  2. fixedDelay : ์ด์ „์— ์‹คํ–‰๋œ Task์˜ ์ข…๋ฃŒ์‹œ๊ฐ„์œผ๋กœ ๋ถ€ํ„ฐ ์ •์˜๋œ ์‹œ๊ฐ„๋งŒํผ ์ง€๋‚œ ํ›„ Task๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.(๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ ๋‹จ์œ„) ex) @Scheduled(fixedRate = 1000)

  3. cron ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” crontab๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Spring Scheduler์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

    cron ์˜ต์…˜

    Seconds 0 ~ 59
    Minutes 0 ~ 59
    Hours 0 ~ 23
    Day of Month 1 ~ 31
    Month 1 ~ 12
    Day of Week 1 ~ 7 (1 => ์ผ์š”์ผ, 7=> ํ† ์š”์ผ / MON,SUN...)
    Years(optional) 1970 ~ 2099
    * ๋ชจ๋“ ์ˆ˜๋ฅผ ์˜๋ฏธ, Minutes ์œ„์น˜์— ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ ๋งค๋ถ„๋งˆ๋‹ค ๋ผ๋Š” ๋œป
    ? Day of Month, Day of Week์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ํŠน๋ณ„ํ•œ ๊ฐ’์ด ์—†๋‹ค๋Š” ๋œป
    - ๊ธฐ๊ฐ„์„ ์„ค์ •, Hour ์œ„์น˜์— 10 - 12 ๋ผ๊ณ  ์“ฐ๋ฉด 10, 11, 12dp ๋™์ž‘ํ•˜๋ผ๋Š” ๋œป
    , ํŠน์ • ์‹œ๊ฐ„์„ ์„ค์ •. Day of Week ์œ„์น˜์— 2, 4, 6 ์ด๋ผ๊ณ  ์“ฐ๋ฉด ์›”, ์ˆ˜, ๊ธˆ์—๋งŒ ๋™์ž‘ํ•˜๋ผ๋Š” ๋œป
    / ์ฆ๊ฐ€๋ฅผ ํ‘œํ˜„, Seconds ์œ„์น˜์— 0/15๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด, 0์ดˆ์— ์‹œ์ž‘ํ•ด์„œ 15์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋™์ž‘ ํ•˜๋ผ๋Š” ๋œป
    L Day Of Month ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‚ ์˜ ์˜๋ฏธ Day of Month ์— L๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ๋‹ฌ ์˜ ๋งˆ์ง€๋ง‰๋‚ ์— ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ
    W Day of Month ์—๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ‰์ผ์„ ์˜๋ฏธ. 15W๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ  15์ผ์ด ํ† ์š”์ผ ์ด๋ฉฐ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ‰์ผ์ธ 14์ผ ๊ธˆ์š”์ผ์— ์‹คํ–‰, 15์ผ์ด ์ผ์š”์ผ์ด๋ฉด 16์ผ ์›”์š”์ผ์— ์‹คํ–‰๋œ๋‹ค. 15์ผ์ด ํ‰์ผ์ด๋ฉด ๊ทธ๋‚  ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋จ
    LW L๊ณผ W๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ, ๊ทธ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ํ‰์ผ์˜ ์˜๋ฏธ
    # Day of Week์— ์‚ฌ์šฉ, 6#3 ์˜ ๊ฒฝ์šฐ 3๋ฒˆ์งธ ์ฃผ ๊ธˆ์š”์ผ์— ์‹คํ–‰๋œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ

0 0 12 * * * ==> ๋งค์ผ 12์‹œ์— ์‹คํ–‰

0 15 10 * * * ==> ๋งค์ผ 10์‹œ 15๋ถ„์— ์‹คํ–‰

0 * 14 * * * ==> ๋งค์ผ 14์‹œ์— ์‹คํ–‰

0 0/5 14 18 * * * ==> ๋งค์ผ 14์‹œ, 18์‹œ์— ์‹œ์ž‘ํ•ด์„œ 5๋ถ„๊ฐ„๊ฒฉ์œผ๋กœ ์‹คํ–‰

0 0-5 14 * * * ==> ๋งค์ผ 14์‹œ์— ์‹œ์ž‘ํ•ด์„œ 0๋ถ„๋™์•ˆ ์‹คํ–‰

ex) @Scheduled(cron = "0 14 14 * * *")

Spring Quartz

Quartz๋Š” ๋‹ค์–‘ํ•œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉ ๋  ์ˆ˜์žˆ๋Š” ์ž‘์—… ์Šค์ผ€์ค„๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์„ค์ •

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-quartz'
}