이글에서 JobRunr에 대하여 간단한 사용법에 대하여 알아 보았다. 이번 글은 JobRunr Pro 버전에서 Service node에 대하여 각기 다른 tag를 설정하는 방법 및 Recurring Job를 설정 시 ProgressBar를 이용하는 방법에 대해 정리한 곳이 없어 정리하려고 한다.
◆Server Tag 기능
보통 production 환경에는 여러개의 node가 존재하고 특정 업무를 수행하는 node도 존재하기 마련이다. Tag 기능은 특정 Job를 특정 node에서만 수행 하도록 하는 기능이다. 이 기능은 pro버전에만 제공한다. JobRunr 설정에 아래 내용을 추가 해야 Tag 기능을 사용 가능하다.
@Configuration
class JobRunrConfig(
private val mongoClient: MongoClient
) {
@Bean
fun storageProvider(jobMapper: JobMapper): StorageProvider {
val storageProvider = MongoDBStorageProvider(mongoClient)
storageProvider.setJobMapper(jobMapper)
return storageProvider
}
@Bean
fun backgroundJobServer(
storageProvider: StorageProvider,
@Qualifier("jobRunrJsonMapper") jsonMapper: JsonMapper,
jobActivator: JobActivator
): BackgroundJobServer {
val backgroundJobServer = BackgroundJobServer(
storageProvider, jsonMapper, jobActivator,
BackgroundJobServerConfiguration
.usingStandardBackgroundJobServerConfiguration()
.andTags("Windows"),
JobNotFoundConfiguration.usingStandardJobNotFoundConfiguration()
)
backgroundJobServer.start()
return backgroundJobServer
}
}
backgroundJobServer에 대한 설정을 해 줘야 된다. 여기서는 모든 parameter 값은 기본 값을 사용했고 tag만 별도로 설정해 주었다.
◆ Tag 사용
JobRunr 함수 정의 시 Tag 정보도 같이 적어 준다.
@Recurring(id = "Myjob-window", cron = "8 8 12 * * *")
@Job(name = "MyJob", runOnServerWithTag = "Windows", retries = 2)
public void myJob() throws Exception {
log.info("My job start.");
}
◆ Recurring Job에서 Progress Bar 사용
Progress Bar 기능은 JobRunr에서 기본적으로 제공하는 DashBoard 기능 중 하나이다. Progress Bar를 사용하려면 JobContext를 인자로 받아야 사용가능하다. 그런데 Recurring Job를 정의하면 인자로 아무것도 받지 못한다. 이를 해결 하기 위해서 Recrring Job 정의서의 Background Job를 enqueue하는 방식으로 우회하여 해결이 가능 하다.
@Recurring(id = "Myjob-window", cron = "8 8 12 * * *")
@Job(name = "MyJob", runOnServerWithTag = "Windows", retries = 2)
public void myJob() throws Exception {
log.info("My job start.");
}
@Job(name = "MyJob-enqueue", runOnServerWithTag = "Windows", retries = 2)
public Boolean MyRealJob(JobContext jobContext) throws Exception {
JobDashboardProgressBar progressBar = jobContext.progressBar(1000);
for(int i = 0; i < 1000; i++) {
progressBar.increaseByOne();
}
}
◆DashBoard에서 log 보기
기본적으로 제공하는 Dashboard에서는 log 정보도 담을 수 있다. 설정은 아래와 같이 하고 사용하면 된다.
//정의
private Logger log =new JobRunrDashboardLogger(LoggerFactory.getLogger(MyService.class))
//사용
log.info("My Job");
'JAVA' 카테고리의 다른 글
[JVM] Garbage Collection (0) | 2021.12.10 |
---|---|
JAVA에 대하여(1) (0) | 2021.12.08 |
Comment