반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- console
- spring3
- Maven
- jquery
- nodejs
- Next.js
- config
- yona
- ajax
- docker
- MariaDB
- git
- Java
- centos7
- NextJS
- SpringBoot
- security
- mybatis
- post
- mysql
- node.js
- spring
- PM2
- submit
- javascript
- jenkins
- MSsql
- Eclipse
- rocky9
- popup
Archives
- Today
- Total
ふたりで
springboot2.3.X SchedulerConfig 본문
728x90
반응형
SMALL
Scheduler사용 시 Thread Pool을 설정하려면 config를 설정해야 한다.
다음과 같이 설정용 클래스 파일을 작성 하여 설정할 수 있다.
package com.xxxx.xxxx.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@Configuration
public class SchedulerConfig implements SchedulingConfigurer{
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
threadPoolTaskScheduler.setThreadNamePrefix("xxxx-ScheduledTask-Pool:");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
나의 경우 springboot2.3.1 버전을 사용 하며, war 파일로 Tomcat8.5.X버전에 배포하는 환경인데 배포 반영시
, 서비스만 재반영시 ThreadPool 관련 에러가 발생 하여 아는분의 조언을 얻어 아래와 같이 설정 부분을 수정 하여
사용중이다.
import org.springframework.boot.task.TaskExecutorBuilder;
import org.springframework.boot.task.TaskSchedulerBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
@EnableScheduling
public class SchedulerConfig{
/*ThreadPool은 기본 8개로 자동 설정 된다.*/
@Bean
public ThreadPoolTaskScheduler taskScheduler(TaskSchedulerBuilder builder) {
return builder.build();
}
@Bean
public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
return builder.build();
}
}
아래는 Service 에서 스케줄 사용한 부분이다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.joda.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.XXXXXXXX.XXXXXXXX.common.mapper.suporder.ScheduledTaskMapper;
import com.XXXXXXXX.XXXXXXXX.common.model.ScheduleTaskVO;
@Service
public class ScheduleTaskService {
@Value("${scheduler.enabled}")
private boolean isEnabled;//스케줄 사용여부
@Autowired
ScheduledTaskMapper scheduledTaskMapper;
private static Logger logger = LoggerFactory.getLogger(ScheduleTaskService.class);
/**
* 2021-02-25: create dbkang test code.
@Scheduled(fixedDelay = 20000)//1000 = 1초
public void testTask() {
if(isEnabled) {
logger.info("Current Thread:{}",Thread.currentThread().getName()+", fixedDelay_GetTime:"+LocalDateTime.now());
}
}
*/
/**
* @Scheduled(cron = "0/30 * * * * *")//0초에 시작해서 이후 10초마다 실행.
* @Scheduled(cron = "0 * * * * ?")//1분마다 실행.
*/
@Scheduled(cron = "0 30 0 * * ?")//매일 24:30
public void sDeleteYnTask() {
if(isEnabled) {
ScheduleTaskVO param = new ScheduleTaskVO();
String baseDt = LocalDateTime.now().minusDays(15).toString().substring(0, 10);
param.setBaseDt(baseDt);
try {
int queryResult= scheduledTaskMapper.updateSendDeleteYn(param);
logger.info("Current Thread:{}",Thread.currentThread().getName()+", LinkSMS_TaskJob_queryResult:"+queryResult);
} catch (Exception e) {
//e.printStackTrace();
logger.error("Current Thread:{}",Thread.currentThread().getName()+", Link SMS list YN update fail, E.Message:"+e.getMessage());
}
}
}
/**
* @Scheduled(cron = "0/30 * * * * *")//0초에 시작해서 이후 10초마다 실행.
* @Scheduled(cron = "0 * * * * ?")//1분마다 실행.
*/
@Scheduled(cron = "0 0 * * * ?")//매일 24:00
public void sDeliveryNumTask() {
if(isEnabled) {
ScheduleTaskVO param = new ScheduleTaskVO();
try {
int queryResult= scheduledTaskMapper.updateUserConfigInfo(param);
logger.info("Current Thread:{}",Thread.currentThread().getName()+", UserConfigInfo_TaskJob_queryResult:"+queryResult);
} catch (Exception e) {
//e.printStackTrace();
logger.error("Current Thread:{}",Thread.currentThread().getName()+", UserConfigInfo table Delivery_num Col update Task Job Fail, E.Message:"+e.getMessage());
}
}
}
}
728x90
반응형
LIST
'Spring' 카테고리의 다른 글
springboot+security+csrf 설정 및 예외처리 설정. (0) | 2021.04.05 |
---|---|
springboot+war(deploy error ServletInitializer(listenerStop) contextDestroyed 실패시 해결...) (0) | 2021.03.22 |
SpringBoot+Security ajax Unauthorized request filter (0) | 2020.12.18 |
springboot2+mybatis+maven 다중(멀티) datasource 설정. (0) | 2020.12.11 |
springboot @Scheduled 사용 해 보기 (0) | 2020.12.01 |
Comments