[SPRING] 스프링 빈 초기화 시간을 계산할 수 있습니까?
SPRING스프링 빈 초기화 시간을 계산할 수 있습니까?
스프링 빈 초기화 중에 포인트 컷 / 인을 넣어 비즈니스에 필요한 일부 통계를 계산할 수있는 스프링 AOP 기능을 개발하고 싶습니다. 스프링 AOP 모듈을 사용하여 가능한지 알고 싶습니다.
해결법
-
==============================
1.이 구성 요소를 사용하여 초기화 시간을 측정 할 수 있습니다.
이 구성 요소를 사용하여 초기화 시간을 측정 할 수 있습니다.
@Component public class MyBeanPostProcessor implements BeanPostProcessor, Ordered { private Map<String, Long> start; private Map<String, Long> end; public MyBeanPostProcessor() { start = new HashMap<>(); end = new HashMap<>(); } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { start.put(beanName, System.currentTimeMillis()); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { end.put(beanName, System.currentTimeMillis()); return bean; } @Override public int getOrder() { return Integer.MAX_VALUE; } //this method returns initialization time of the bean. public long initializationTime(String beanName) { return end.get(beanName) - start.get(beanName); } }
그러나 이번에는 생성자를 실행하는 시간은 포함되지 않습니다.
그러나 모든 bean 생성자를 실행하기 전에 bean 정의를 읽은 후 잠시 기록을 남길 수 있습니다. BeanFactoryPostProcessor를 사용하십시오.
@Component public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { private long launchTime; @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { launchTime = System.currentTimeMillis(); } public long getLaunchTime() { return launchTime; } }
lauchTime은 스프링이 구성 (예 : xml 파일) 읽기를 마치고 Bean을 작성할 준비가 된 순간입니다.
따라서 전체 초기화 시간은 max (end)-launchTime과 같은 두 가지 구성 요소를 사용하여 계산할 수 있습니다. (마지막 Bean이 초기화 된 시간과 Bean 구성을 읽은 시간의 차이)
from https://stackoverflow.com/questions/38701285/can-we-calculate-spring-bean-initialization-time by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Request Param에서 + (플러스)의 역 직렬화 (0) | 2019.08.15 |
---|---|
[SPRING] Spring 주석 @Autowired는 어떻게 작동합니까? (0) | 2019.08.15 |
[SPRING] 스프링 데이터 JPA 기본 쿼리 건너 뛰기 잠김 (0) | 2019.08.14 |
[SPRING] 스프링 클라우드를 사용하여 유레카 서버의 기본 포트 변경 (0) | 2019.08.14 |
[SPRING] 현재 스레드에 대한 트랜잭션 동기화 세션을 얻을 수 없습니다 (0) | 2019.08.14 |