2010-02-11 7 views
3

우리는 봄 응용 프로그램 (디자인에 의해 단일 스레드)이 있습니다. 우리는 멀티 스레드가되도록 적응시키고 자합니다. 한 가지 아이디어는 상위 스레드를 만들고 자신의 앱 컨텍스트를 인스턴스화하고 병렬로 실행하는 다른 스레드를 생성하는 것이 었습니다. (기억과 cpu는 지금부터는 관계가 없다). 나는 싱글 톤이 봄에 어떻게 실현되는지 확신하지 못한다. 스프링은 정적 참조를 사용하여 이것을 반환하거나 조회를 수행하는 일종의 캐시/맵 (비 정적/비 싱글 톤 및 컨텍스트 특정)을 사용합니까? 이것은 config-xml을 변경할지 여부를 결정하는 데 도움이됩니다. 어떤 아이디어라도 제발.여러 응용 프로그램 컨텍스트에 걸쳐 스프링 싱글 톤 빈

+0

btw - 컨텍스트간에 싱글 톤을 공유 하시겠습니까? 아니면 각 컨텍스트마다 다른 시그널 톤을 원하십니까? – Bozho

+0

아니요, 컨텍스트간에 개체를 공유하고 싶지 않습니다. 다른 스레드가 다른 개체 그룹을 사용하게하고 싶습니다. 문제는 로그 및 db 트랜잭션을 통합하는 것입니다. 나는 오브젝트 레벨 뮤텍스에 신경 쓰고 싶지 않다. 만약 싱글 톤 = false로 설정했다면 프레임 워크 전체에서 변경해야합니다. – questzen

답변

5

singleton 빈은 응용 프로그램 컨텍스트 당 한 번 인스턴스화됩니다. 즉, 동일한 구성에서 많은 응용 프로그램 컨텍스트를 작성하면 싱글 톤 bean의 다른 인스턴스를 갖게됩니다.

단일 톤 bean의 단일 인스턴스를 공유하려면 부모 응용 프로그램 컨텍스트에서이를 선언하고 다중 컨텍스트에 해당 부모 컨텍스트를 제공하십시오.

+0

+1이라는 용어는 여기에 있지만 싱글 톤이라는 용어는 오도 된 것입니다. 그것들은 애플리케이션 컨텍스트 범위 내에서 싱글 톤이지만 그 이상은 아닙니다. –

2

왜 응용 프로그램을 멀티 스레드로 만들려면 여러 응용 프로그램 컨텍스트가 필요합니까? 여러 스레드가 동일한 컨텍스트를 완벽하게 사용할 수 있습니다.

업데이트 : 그것은 당신이 정말로 무엇을 당신의 싱글 콩이 실제로하고있는 무엇을 그 기능은 다중 스레드 환경에있을 것입니다 볼 필요가 날 것으로 보인다 Take a look at spring batch

+1

그리고 이것은 동기화 된 섹션의 도입을 포함 할 것입니다. 특히 유니 코드 테스트가없는 코드의 문제점이 있습니다. – questzen

+0

동일한 데이터를 수정하려는 경우 동기화 된 섹션을 피할 수 없습니다. – Bozho

1

. 스레딩 모델에 맞게 응용 프로그램 컨텍스트를 시도하고 업데이트하지는 않지만 적절한 Bean의 수명주기입니다.

  • 실제로 싱글 톤이고 본질적으로 스레드 안전성이 있다면 다중 스레드로 사용하십시오.
  • 스레드가 안전하지 않은 경우 새로운 멀티 스레드 구현에서 스프링 싱글 톤을 계속 사용해야합니까? 스레드별로 인스턴스화 된 non-singleton Bean으로 업데이트 한 다음 전체 응용 프로그램 컨텍스트를 특정 스레드에 연결하려고 시도하는 것이 더 바람직 할 수 있습니다.