Spring Tests에서 스케쥴링 제외하기
2020. 11. 10. 23:55ㆍ개발&TIL/스프링
스프링 배치에서 @Scheduled(fixedDelay = 10 * 1000) 로 선언된 스케쥴링이 테스트 실행시 실행되는 현상을 제거
ConditionalOnProperty 애너테이션을 추가하여 셋팅
- 설정
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.scheduling.annotation.EnableScheduling
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
@Configuration
@EnableScheduling
@ConditionalOnProperty( value = ["app.scheduling.enable"], havingValue = "true", matchIfMissing = true)
class BatchSchedulingConfiguration {
@Bean
fun taskScheduler(): ThreadPoolTaskScheduler {
return ThreadPoolTaskScheduler().apply {
// 종료 처리 중 작업 중인 task가 있는 경우
// 쓰레드에 interrupt를 보내지 않고 awaitTerminationSeconds 만큼 기다린다.
setWaitForTasksToCompleteOnShutdown(true)
// 종료 전 모든 작업이 완료되기까지 최대 300초를 기다린다.
setAwaitTerminationSeconds(300)
// thread name
setThreadNamePrefix("scheduler")
isRemoveOnCancelPolicy = true
// 쓰레드풀은 10개 유지
poolSize = 10
}
}
- 테스트 코드 (app.scheduling.enable=false 추가)
import mu.KLogging
import org.junit.Assert
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.TestPropertySource
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.transaction.annotation.Transactional
@ExtendWith(SpringExtension::class)
@SpringBootTest()
@TestPropertySource(properties = ["app.scheduling.enable=false"])
@Transactional
internal class BatchUtilTest {
companion object: KLogging()
@BeforeEach
fun setUp() {
}
@Test
fun test() {
Assert.assertTrue(true)
}
}
728x90
'개발&TIL > 스프링' 카테고리의 다른 글
스프링부트 - #5 oAuth2 (0) | 2020.11.17 |
---|---|
스프링부트 - #4 web (0) | 2020.11.17 |
스프링부트 - #3 테스트 (0) | 2020.11.17 |
스프링부트 - #2 환경설정 (0) | 2020.11.17 |
스프링 부트 - #1 소개 (0) | 2020.11.17 |