SQL 요청을 최적화하기 위해 불필요한 호출을 피하기 위해 다른 서비스 소비를 집계하는 서비스를 만들었습니다. (내 웹 애플리케이션의 일부 페이지는 수백만에게 하루 시간이라고, 그래서 데이터베이스 쿼리의 결과를 각 요청에 가능한 한 여러 번 재사용 할)스프링 4 @Service with @RequestScope
내가 만든 솔루션이 하나입니다
내
: 서비스 대신 기본 범위 (싱글)내 컨트롤러에서
@Service
@RequestScope
public MyService {
private int param;
@Autowired
private OtherService otherService;
@Autowired
private OtherService2 otherService2;
private List<Elements> elements;
private List<OtherElements> otherElements;
public void init(int param) {
this.param = param;
}
public List<Elements> getElements() {
if(this.elements == null) {
//Init elements
this.elements = otherService.getElements(param);
}
return this.elements;
}
public List<OtherElements> getOtherElements() {
if(this.otherElements == null) {
//Init otherElements
this.otherElements = otherService2.getOtherElements(param);
}
return this.otherElements;
}
public String getMainTextPres() {
//Need to use lElements;
List<Elements> elts = this.getElements();
....
return myString;
}
public String getSecondTextPres() {
//Need to use lElements;
List<Elements> elts = this.getElements();
//Also Need to use lElements;
List<OtherElements> otherElts = this.getOtherElements();
....
return myString;
}
}
이면 MyService에서의 @RequestScope있다 물론 833,
, 나는 다른 요소 때문에는 myService 사용을 많이 내 예를 단순화했습니다, 나는 그의 회원의 초기화가
이 방법은 속성의 게으른 로딩을하는 장점이있다 속성을 보호하는 경우에만 I 그것들이 필요하다. 내 프로젝트 (동일한 컨트롤러 또는 다른 컨트롤러)에서 SecondTextPres 만 필요한 경우 "getSecondTextPres"를 호출하면 내 예제 beacuse의 경우와 다른 두 목록이 초기화됩니다. 첫 번째 목록은 "getMainTextPres"가 호출 될 때 초기화되었습니다.
내 질문은 다음과 같습니다
는- 당신은 일을 이런 식으로 어떻게 생각하십니까?
- 각 요청마다 서비스를 인스턴스화하기 때문에 성능 문제가 발생할 수 있습니까?
감사합니다.
줄리앙
요청 범위 Bean으로 최적화 된 이유는 무엇입니까? 각 요청에는 자체 인스턴스가 있으며 재사용되는 것은 없습니다. 쿼리를 최적화하거나 캐시를 최적화하고 싶다면 Spring이 당신을 위해 할 수있는 일 (그리고 어떻게 결과를 캐싱 할 수 있는지)을 연구하는 것이 좋습니다. –
같은 저수준 정보를 여러 번 사용하는 동일한 요청이 있기 때문에 최적화되었습니다.이 일을 수행하면 이미 서비스 계층에있는 데이터를 다시 사용할 수 있습니다. 2 가지 요청에 대해 최적화 할 생각이 없습니다 –
단일 요청에서 이와 같은 최적화가 필요한 경우 흐름을 재검토해야 할 수 있습니다. 하나의 컨트롤러 만 조회하는 요청에서 다른 모든 요청은 새로운 요청입니다. 귀하의 설명을 보면, 측정하지도 않았거나 실제로 문제가있는 것을 최적화하려고 시도하는 것으로 보입니다. 최적화가 필요하지 않은 것들을 최적화하려고하는 것 같습니다. 기억하십시오 : * 조기 최적화는 모든 악의 근원입니다 *. 스코프를 도입하는 대신 사물을 향상시키는 방법이 더 쉽고 (그리고 더 쉽다)있을 수 있습니다. 그러나 먼저 측정, 측정, 측정. –