Spring Boot 기동 시 Bean을 lazy하게 설정하려면 application.yml에 아래와 같이 설정하면 된다.
spring:
main:
lazy-initialization: true
하지만 특정 Bean의 경우 즉시(eager) 로딩되어야 할 경우가 있기 때문에 선택적으로 설정할 필요가 있다.
그럴 경우 아래와 같이 Bean의 이름으로 특정 Bean만 lazy로 설정할 수 있다.
@Bean
public static BeanFactoryPostProcessor beanFactoryPostProcessor() {
return beanFactory ->
Arrays.stream(beanFactory.getBeanDefinitionNames())
.filter(LazyBeanConfig::filterLazyInit)
.forEach(beanName -> beanFactory.getBeanDefinition(beanName).setLazyInit(true));
}
private static boolean filterLazyInit(String beanName) {
if (beanName.endsWith("빈 이름")) {
return false;
} else {
return true;
}
}
반응형