hara
Spring Boot 2.0 - 8장: 자바 엔터프라이즈 서비스 본문
#스프링 비동기 처리
- 비동기 처리의 장점
요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있다.(데이터 처리 효율적)
- Spring Boot에서 지원하는 비동기 처리 기능
- @Async: 비동기 메소드 실행 기능 제공
@EnableAsync
@SpringBootApplication
public class Application {
...
}
- @EnableAsync: 스프링 부터가 비동기 실행 메소드를 자동으로 판단 할 수 있게 지원
public class testService {
@Async
public void test(String message) throws Exception {
// do something
}
}
- TaskExecutor
- @EnableAsync 추가 시 스프링에서 자동으로 TaskExecutor 인스턴스를 발견해 비동기 메소드 실행에 사용
옵션 항목 | 설명 |
core-size | 코어 스레드 개수, 기본 8개 |
max-size | 스레드 최대 개수, 기본값 Integer.MAX_VALUE |
queue-capacity | 큐 용량, 기본값 제한없음. max-size설명 무시 |
keep-alive | 스레드 사라지기 전까지 대기할 시간 설정 |
thread-name-prefix | 새롭게 만들어지는 스레드 이름의 접두어 설정 |
allow-core-thread-timeout | 스레드 타임아웃 여부 설정, 기본값 true |
- properties 설정
spring.task.execution.pool.core-size=4
spring.task.execution.pool.max-size=16
...
- Bean 설정
- properties 설정 대신 java파일 내에서 옵션 설정 가능
@Configuration
@EnableAsync
public class SpringAsyncConfig {
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(3);
taskExecutor.setMaxPoolSize(30);
taskExecutor.setQueueCapacity(10);
taskExecutor.setThreadNamePrefix("Executor-");
taskExecutor.initialize();
return taskExecutor;
}
}
#스프링 작업 스케줄링
- 주기적인 작업이 필요할 때 설정하면 유용한 기능
- Spring Boot에서 지원하는 스케줄링 기능
- @Scheduled: 주기적으로 수행 되어야할 메소드 실행 기능
@Scheduled(fixedRateString = "5", initialDelay = 3000)
private void scheduleTest() {
logger.error("hello jeong-pro");
}
- @EnableScheduling: 스프링 부터가 스케줄링 실행 메소드를 자동으로 판단 할 수 있게 지원
@EnableScheduling
@SpringBootApplication
public class SchedulerApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulerApplication.class, args);
}
}
- @Scheduled > CRON식 표현
@Scheduled(cron="0 30 0 1 * *")
초 | 분 | 시 | 일 | 월 | 요일 | 연도
0~59 | 0~59 | 0~23 | 1~31 | 1~12 | 0~6 | 생략가능
요일 : 0 (일요일) ~ 6( 토요일)
? : 설정 값 없을 때 - 일과 요일 에서만 사용가능
* : 모든조건
시작시간/단위 : 시작시간부터 해당 단위 때
시작범위-끝범위 : 시작범위 부터 끝범위까지
L : 마지막 - 일, 요일 에서만 사용가능
W : 가장 가까운 평일 찾는다 - 일 에서만 사용가능
ex) 10W
- 10일이 평일 일 때 : 10일에 실행
- 10일이 토요일 일 때 : 가장 가까운 평일인 금요일(9일)에 참
- 10일이 일요일 일 때 : 가장 가까운 평일인 월요일(11일)에 참
# : 몇주 째인지 찾는다 - 요일 에서만 사용가능
ex) 3#2 : 수요일#2째주 에 참
예제
1) 매월 10일 오전 11시
0 1 1 10 * *
2) 매일 오후 2시 5분 0초
0 5 14 * * *
3) 10분마다 도는 스케줄러 : 10분 0초, 20분 0초...
0 0/10 * * *
4) 조건에서만 실행되는 스케줄러 : 10분 0초, 11분 0초 ~ 15분 0초까지 실행
0 10-15 * * *
#이메일 전송
- 좀 더 쉬운 방법으로 메일을 보내는 방법을 스프링 부트에서 지원
- javax.mail, thymeleaf 에서 지원하는 각각의 방법으로 개발 가능
- 프로젝트 생성부터 기능 설정까지 참고 url: rooted.tistory.com/2
#JMX MBean 등록
- JMX 란?
- Java Management Extensions, 프로그래머들에게 자바 어플리케이션의 모니터링과 관리 기능을 제공
-
배치 작업의 실행 결과나 메소드 실행, 설정 메타데이터 변경 시 사용 가능
- JConsole
- 애플리케이션의 상태를 모니터링 할 수 있는 프로그램 - 실행과정 참고 url: java.ihoney.pe.kr/412
- Spring Boot에서 지원하는 JMX 기능
- @ManagedResource: 스프링 부터가 JMX사용 가능하게 지원
- @ManagedOperation: JMX 세부 실행 메소드
@Component
@ManagedResource(objectName = MyMBean.MBEAN_NAME)
public class HelloWorld {
private static final Logger log = LoggerFactory.getLogger(CheckinController.class);
@ManagedOperation
public void printMessage() {
log.info("Hello World");
}
}
#참고
- 책: Spring Boot2 Recipes 8장
- 동기, 비동기 장단점: juyeop.tistory.com/22
- @Async, @EnableAsync 설명: dveamer.github.io/java/SpringAsync.html
- @Scheduled, @EnableScheduling설명: dveamer.github.io/java/SpringAsync.htmljeong-pro.tistory.com/186
- CRON표현식 설명: sun-p.tistory.com/115
- JMX 설명: leeyongjin.tistory.com/entry/JMX-%EA%B8%B0%EC%88%A0%EC%9D%B4%ED%95%B4
'공부 > 스프링 부트 2 레시피' 카테고리의 다른 글
Spring Boot 2.0 - 10장: 스프링 부트 액튜에이터 (0) | 2020.10.05 |
---|---|
Spring Boot 2.0 - 9장: 메시징 (0) | 2020.09.16 |
Spring Boot 2.0 - 4장: 스프링 MVC - 비동기 (0) | 2020.09.16 |
Spring Boot 2.0 - 7장: 데이터 처리 (0) | 2020.09.16 |
Spring Boot 2.0 - 6장: 스프링보안 (0) | 2020.09.01 |