2017-11-23 1 views
0

Spring Framework를 사용하여 REST를 기반으로하는 응용 프로그램을 번역하고 있습니다. 이제 요청의 언어에 따라 일부 응답을 번역해야합니다. 예를 들어 :요청마다 Spring에서 전역 변수를 가질 수 있습니까?

/get-me-an-answer/?lang=es Spanish 
/get-me-an-answer/?lang=en English 
/get-me-an-answer/?lang=fr French 

내가 Translang

class Translang { 
... 
     public static String language_code = null; 
... 
    } 

문제라는 클래스의 정적 변수로 변수 language_code이 새로운 요청이 언어를 변경합니다 올 멀티 스레딩과 다른 이전의 경우입니다 요청이 실행되는 것은 아마도 요청한 원래 언어가 아닌 수정 된 언어로 응답 할 수 있습니다.

이것이 나의 질문의 이유입니다.이 문제를 피하기 위해 요청 당 Spring에 전역 변수를 어떻게 가질 수 있습니까?

+0

정적 변수가 필요한 이유는 무엇입니까? url 매개 변수를 올바르게 처리 할 수 ​​있습니까? – Stefan

+0

그래, 할 수는 있어도 여러 가지 방법을 거쳐야 할 것 같아, 그 워크로드를 피하고 싶다. 단순히 정적 변수에 액세스하려는 방법이나 어떻게 할 수 있을까? –

+0

Rest는 상태가 없으므로 통과해야하며 상태 (언어 등)를 설정할 때 이상한 결과가 발생합니다. 값을 기본 메소드에 전달해야합니다. – Stefan

답변

0

요청 흐름을 탐색하는 컨텍스트를 구현하는 것이 좋습니다. 이렇게하면 전체 트랜잭션 중에서이 컨텍스트를 전달할 수 있습니다. 일단 도메인 요소가 있으면 각 트랜잭션에 대해 새 컨텍스트를 만들어야합니다. 귀하가받는 요청. 현재 당신의 클래스는 쓰레드에 안전하지 않다. 이것은 bean의 범위를 변경하는 문제도 수정 될 수있다.

0

요청에 따라 당신이 찾고있는 것이 ThreadLocal 인 것으로 보입니다. 별도의 스레드에 의해 수행됩니다.

이 클래스는 스레드 로컬 변수를 제공합니다. 이 변수들은 과 정상적인 대응점이 다르므로 에 액세스하는 각 스레드 (get 또는 set 메소드를 통해)는 독립적으로 초기화 된 변수 사본을 가지고 있습니다. ThreadLocal 인스턴스는 일반적으로 상태를 스레드 (예 : 사용자 ID 또는 트랜잭션 ID)과 연결하려는 클래스의 전용 필드 인 입니다.

+0

이 링크가 질문에 대답 할 수 있지만 여기에 답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 포스트/18046225) – Omi

+0

합리적인 것 같아서 더 자세한 내용이 원래 답변에 추가되었습니다. –

관련 문제