해결된 질문
21.02.03 19:07 작성
·
266
0
안녕하세요~ 강사님~
수업시간에 JPAQueryFactory를 @Bean으로 등록하셨는데 이걸 주입받은 객체에서 다른 객체로 넣어줘도 멀티쓰레드 환경에서 문제가 없을까요??
샘플 코드
public interface FruitBehavior {
List<FruitList> getFruitList();
}
@RequiredArgsConstructor
public class BananaRepository implements FruitBehavior {
private final JPAQueryFactory queryFactory;
@Override
public List<FruitList> getFruitList() {
queryFactory
.selectFrom(fruit);
}
}
@RequiredArgsConstructor
public class TestRepositorySupport {
private final JPAQueryFactory queryFactory;
private final Map<String, FruitBehavior> map = new HashMap<>();
void doSomething() {
map.put("Banana", new BananaRepository(queryFactory)); // 여기!!!
}
}
대충 이런식으로 ...TestRePositorySupport에서 주입받은 queryFactory를 BananaRepository를 만들때 넣어줘도 문제가 없을까요?
실행해봤는데 결과는 잘 출력되는데.. 혹시나 싱글턴이 깨지거나 다른 이슈들이 생기진 않을까 궁금합니다..!!
답변 1
1
2021. 02. 03. 22:18
안녕하세요. 참치캔님
네 괜찮습니다. JPAQueryFactory는 쓰레드에 안전합니다.
그런데 여기 코드에서 HashMap을 사용하셨는데요. 멀티쓰레드 상황에서는 Concurrenthashmap을 사용하셔야 합니다.
감사합니다.