1. ๋ฌธ์ ์ํฉ
์ฌ์ฉ์๊ฐ ๋ฐ๋ฉ์ ์ง์ ์ ํด์ง ์๊ฐ ๋ด๋ก ํ์ง ์์์ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ํ๋ํฐ๋ฅผ ์ฃผ๊ณ ์๋ฒ์์ ์๋์ผ๋ก ๋ฐ๋ฉํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค.
์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ ๊น ๊ณ ๋ฏผํ๋ค๊ฐ "API๋ฅผ ๊ตฌํํด ๋๊ณ cron ๋ช
๋ น์ผ๋ก ์ ํด์ง ์๊ฐ๋ง๋ค ํธ์ถํด์ผ ํ ๊น?"๋ผ๊ณ ์๊ฐํ๊ณ ,
Spring์๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด ์๋์ง ์ฐพ์๋ณด์๋ค
2. ์ด๋ป๊ฒ ๊ตฌํํ ๊น?
์ฐ์ Spring์ ์ค์ผ์ค๋ง์ ๋์์ฃผ๋ ๊ธฐ๋ฅ์ด ์๋์ง ์์๋ณด์๋ค.
@Scheduled ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ ๋๋ ํน์ ์๊ฐ์ ํด๋น ์ฝ๋๋ฅผ ์คํํ๋๋ก ์ค์ ํ ์ ์๋ค๊ณ ํ๋ค.
3. @Scheduled๋ฅผ ์ ์ฉํด๋ณด์
(1) ๋จผ์ Main Application class์ @EnableScheduling ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๋ค.
@SpringBootApplication
@EnableScheduling
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
...
}
(2) ์ค์ผ์ค๋ง ์์ ์ ํ class์ ํด๋น ๋ฉ์๋์ @Scheduled ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๊ณ ์ต์ ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ถ๊ฐํ๋ค.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class AutoTableReturnSchedulingService {
......
@Scheduled(cron = "0 20,50 * * * *")
@Transactional
public void autoTableReturn() {
}
...
}
@Scheduled๋ฅผ ์ถ๊ฐํ ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค๋ ์คํ๋ง Bean์ผ๋ก ๋ฑ๋กํด์ผ ํ๋ฏ๋ก @Service๋ฅผ ๋ถ์ฌ์ฃผ์๋ค. (@Component ๋ถ์ฌ๋ ๋จ)
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด @Scheduled ์ด๋
ธํ
์ด์
๋ด์ cron = "...." ์ด ์ถ๊ฐ๋์ด ์๋ค.
๋ช ๋ถ๋ง๋ค ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ ๊ฒ์ด๋ผ๋ฉด fixedDelay, fixedRate์ ๊ฐ์ ์ต์
์ด ์๊ฒ ์ง๋ง,
๋์ ๊ฒฝ์ฐ์๋ ํน์ ์๊ฐ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Cron ํํ์์ ์ฌ์ฉํ์ฌ ์์
์ ๋ฑ๋กํ์๋ค.
*์ด 6๊ฐ ์๋๋ฐ
์ด(0-59), ๋ถ(0-59), ์๊ฐ(0-23), ์ผ(1-31), ์(1-12), ์์ผ(0-6)์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ ์์ autoTableReturn ๋ฉ์๋๋ ๋งค์ผ ๋งค์ 20๋ถ, 50๋ถ๋ง๋ค ํธ์ถ๋๋ค.