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 ์ต์
-
fixedRate : ์ด์ ์ ์คํ๋ Task์ ์์์๊ฐ์ผ๋ก ๋ถํฐ ์ ์๋ ์๊ฐ๋งํผ ์ง๋ ํ Task๋ฅผ ์คํํ๋ค.(๋ฐ๋ฆฌ์ธ์ปจ๋ ๋จ์) ex) @Scheduled(fixedRate = 1000)
-
fixedDelay : ์ด์ ์ ์คํ๋ Task์ ์ข ๋ฃ์๊ฐ์ผ๋ก ๋ถํฐ ์ ์๋ ์๊ฐ๋งํผ ์ง๋ ํ Task๋ฅผ ์คํํ๋ค.(๋ฐ๋ฆฌ์ธ์ปจ๋ ๋จ์) ex) @Scheduled(fixedRate = 1000)
-
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'
}